MySQL选择具有更高优先级

时间:2014-07-15 08:42:06

标签: mysql

我有这样的查询:

SELECT id, title
FROM tbl_item
WHERE id!=477
  AND (projectid=172 OR styleid=66)
ORDER BY timestamp DESC LIMIT 4;

如果首先使用相同的projectid(列出所有projectid 172),然后使用相同的样式(66)来订购项目,即使styleid的时间戳更大。

id  projectid styleid timestamp
475 172       66      1401660000
459 172       66      1398981600
458 167       66      1398636000
456 172       64      1397685600
449  63       66      1394665200
444 167       66      1391727600
411 113       66      1386630000
408  62       66      1385938800
407 159       66      1385938800
387 159       66      1375826400

上面有我的快照,我的愿望结果是两个查询的合并: 查询1:SELECT id FROM tbl_item WHERE projectid = 172; 查询2:SELECT id FROM tbl_item WHERE styleid = 66;

欲望结果ID:475,459,456,458

前3个ID(475,459,456)是#1的结果,458是#2的结果(LIMIT 4结果)

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以向ORDER BY添加多个列,从左到右排列优先级,请参阅docs

  SELECT id, projectid, styleid, timestamp
    FROM tbl_item
   WHERE ...
ORDER BY projectid, styleid, timestamp DESC;

N.B。您不需要SELECT ORDER BY使用的列,为了清楚起见,我刚刚将它们包括在内。

<强>更新

从您的更新到问题,可以像这样做

  SELECT id, projectid, styleid, timestamp
    FROM tbl_item
   WHERE projectid=172 
      OR styleid=66
ORDER BY projectid=172 DESC,
         projectid != 172 AND styleid=66 DESC,
         timestamp DESC
   LIMIT 4;