如何选择具有指定值的列,并使用指定值的出现次数对它们进行排序

时间:2016-11-23 11:22:17

标签: php mysql sql

SELECT * FROM table WHERE product like '%abc%' OR product like '%cde%'

是否可以使用

显示所有产品
both 'abc' and 'cde' first 

然后带

的产品
either 'abc' or 'cde' 

3 个答案:

答案 0 :(得分:2)

ORDER BY一个case表达式,如果abd和cde都返回1,否则为2.

SELECT * 
FROM table
WHERE product like '%abc%' OR product like '%cde%'
ORDER BY case when product like '%abc%' AND product like '%cde%' then 1
              else 2
         end

答案 1 :(得分:0)

尝试在ORDER BY子句中使用相关查询:

SELECT t.* 
FROM table t
WHERE product like '%abc%' OR product like '%cde%'
ORDER BY (SELECT COUNT(DISTINCT product) FROM table s
          WHERE t.<Relation> = s.<Relation>
           AND s.product like '%abc%' OR s.product like '%cde%') DESC

<Relation>替换为表格键。

答案 2 :(得分:0)

对于精致的订购:

SELECT * FROM table 
WHERE product like '%abc%' OR product like '%cde%'
ORDER BY 
    CASE
        /* First show products with 'abc' AND 'cde'... */
        WHEN product LIKE '%abc%' AND product LIKE '%cde%' THEN 1
        /* ...2nd products with with 'abc' */
        WHEN product LIKE '%abc%' THEN 2 
        /* ...and finally products with with 'cde' */
        WHEN product LIKE '%cde%' THEN 3 
        ELSE 4 /* not actually necessary in this case */
    END