我有三张桌子
产品
id,name,desc
标志
id,name
Product_flags
Product_id,Flag_id
某些产品的标志与其相关联,而其他产品则没有。我需要选择产品并在选择查询中为特定标志提供首选项。
这是我的标志ID为2,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
此排序顺序无效。我怎么做对了?
由于
答案 0 :(得分:0)
这是一个奇怪的请求,但我认为你可以通过这样的条款中的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