我从课程表中获取了一份参加课程的人员列表,该查询正在运行,但是客户要求我们让查询人员(他们登录到网站)出现在列表顶部。人们将不会全程参加课程,因此查询中的日期。
这是我当前的查询:
select firstname, lastname, startdate, enddate, contactid, courseid, venueid from courses2011 where courseid = '4'
and ((enddate > '2011-05-01') AND (startdate < '2011-05-20'))"
说contactid“12345”已登录到网站 - 如何进行查询,使它们首先显示在列表中。
答案 0 :(得分:3)
使用ORDER BY
子句:
SELECT [...]
ORDER BY CASE WHEN contactid = '12345' THEN 1 ELSE 0 END DESC
当然,您可以在ORDER BY
子句中添加其他ORDER BY
个字段。当然,您可以从会话表中读取'12345'
或使用绑定变量或您用于识别登录联系人的任何方式。
答案 1 :(得分:2)
一个选项是按条件添加顺序,如:
ORDER BY IF(contactid = "12345",0,1)
答案 2 :(得分:1)
在SO上有类似的查询。看看this是否解决了您的问题。
答案 3 :(得分:1)
ORDER BY contactid = 12345 DESC
答案 4 :(得分:1)
ORDER BY FIELD(contactid,12345) DESC
答案 5 :(得分:-1)
您可以使用UNION
,如下所示:
SELECT firstname, lastname, startdate, enddate, contactid, courseid, venueid
FROM courses2011
WHERE contactid = 12345
UNION
SELECT firstname, lastname, startdate, enddate, contactid, courseid, venueid
FROM courses2011
WHERE contactid <> 12345
AND courseid = '4'
AND ((enddate > '2011-05-01') AND (startdate < '2011-05-20'))
;