通过连接表的特定ID对mysql结果进行排序

时间:2014-06-05 09:26:59

标签: php mysql

我有三张桌子

产品

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

此排序顺序无效。我怎么做对了?

由于

1 个答案:

答案 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