我有这样的查询:
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结果)
谢谢!
答案 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;