我有三张桌子
产品
标识、名称、描述
旗帜
身份证,姓名
产品标志
产品id,标志id
有些产品有与之相关的标志,而另一些则没有。我需要select products并在select查询中为特定标志提供首选项。
这是我的查询,提供对标志id2、3、9的首选项,后面是其他标志,后面是未标记的产品。。
SELECT p.*, f.name flagname FROM products p
LEFT JOIN products_flags pf ON pf.product_id=p.id
LEFT JOIN flags f ON f.id = pf.flag_id
ORDER BY f.id=2, f.id=3, f.id=9, f.id, p.name
此排序顺序无效。我该怎么做才对?
谢谢
最佳答案
这是一个奇怪的请求,但我认为您可以用order by子句中的case语句来绕过它,比如:
SELECT
p.*, f.name flagname
FROM products p
LEFT JOIN products_flags pf ON pf.product_id=p.id
LEFT JOIN flags f ON f.id = pf.flag_id
ORDER BY
case
when f.id=2 then f.id-10
when f.id=3 then f.id-10
when f.id=9 then f.id-10
default f.id
end,
p.name
编辑:当您想要“时髦”的排序时,按列排序可能是一个好主意。至于case语句,它所做的是返回一个要排序的值,但以这种方式执行-类似于if语句:
if id=2 then treat it like -8
if id=3 then treat it like -7
if id=3 then treat it like -1
otherwise just use whatever is in id
关于php - 按联接表特定ID对mysql结果排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24056446/