我想要这样的事情:
$st = $db->query("select * from posts where position = 'slider' order by inde asc");
PLUS
$st = $db->query("select * from posts where position = 'right' order by inde asc");
PLUS
$st = $db->query("select * from posts where position = 'below' order by inde asc");
因此,应使用此位置顺序(滑块右下方)选择行,但每个组内部应按inde排序。
任何帮助?
答案 0 :(得分:2)
使用ORDER BY FIELD()
。 FIELD()
返回给定值列表中值的位置。
SELECT *
FROM posts
WHERE position IN ('slider', 'right', 'below')
ORDER BY FIELD(position, 'slider', 'right', 'below'), inde
答案 1 :(得分:2)
最简单的解决方案是这样的查询:
SELECT p.*
FROM posts p
WHERE p.position IN ('slider','right','below')
ORDER
BY p.position DESC
, p.inde ASC
(我们注意到position
值的顺序可以基于字符串值...我们知道's' > 'r' > 'b'
。
如果我们需要不同顺序的那些,我们可以使用表达式将位置值解码为可以通过ORDER BY排序的值。 (并且有几种可能的模式,以及我们可以使用的各种表达方式。)
如果要求是运行三个单独的查询(出于性能原因?),这样的事情也会返回指定的结果:
( SELECT p.* FROM posts p WHERE p.position = 'slider' ORDER BY p.inde )
UNION ALL
( SELECT p.* FROM posts p WHERE p.position = 'right' ORDER BY p.inde )
UNION ALL
( SELECT p.* FROM posts p WHERE p.position = 'below' ORDER BY p.inde )
(如果我们想更明确地表达对结果进行排序的要求,MySQL还允许我们在最后一个paren之后添加一个ORDER BY来对整个集合进行排序。)