我有三张桌子
产品
标识、名称、描述
旗帜
身份证,姓名
产品标志
产品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/

10-14 15:55
查看更多