2011-05-30 62 views
1

我正在建立一個用戶搜索,我有一個用戶表,其中有ID,第一個和最後一個。SQL查詢使用然後(?)或積分系統

然後我查詢一個名字,說:「約翰史密斯」。

使用PHP我會把查詢分成兩部分:q1 = John和q2 = Smith。

我想要設計一個積分系統,其中first = John和last = Smith的記錄被拉到頂端。

所以我的SQL是這樣的:

SELECT User.id, User.first, User.last 
FROM users as User 
WHERE (User.first = q1 OR User.first = q2) OR //if this is true +1 points 
WHERE (User.last = q1 OR User.last = q2) OR //if this is true +1 points 

//then sum up the points and order by it (so the User.id with John Smith will have 2 points) 

有什麼建議?

+3

'總和(情況下....然後1點否則爲0結束)'應該做的伎倆 – 2011-05-30 07:16:58

+0

這個作品呢!感謝您的幫助 – cdub 2011-05-30 07:31:07

回答

3

如果你的DBMS有一個IF函數,你可以這樣做:

SELECT User.id, User.first, User.last, 
    IF (User.first = q1 OR User.first = q2, 1, 0) + 
    IF (User.last = q1 OR User.last = q2, 1, 0) as points 
FROM users as User 
ORDER BY points DESC 
+0

這將工作,但我如何停止結果集中出現0點的那些? – cdub 2011-05-30 07:30:23

+0

您可以添加'WHERE points> 0'。 – vbence 2011-05-30 07:33:43

+0

這就是我的想法,但奇怪的是,我得到這個:'where子句'中的未知列'points' – cdub 2011-05-30 07:37:30