我们如何使用MySQL使用IN()来排序列表

时间:2011-11-28 11:37:42

标签: mysql sql sql-order-by

我想知道,我们如何在MySQL中使用order by命令列表。 以下是声明

SELECT info.* From p_all,resinfo 
WHERE (p_all.id = info.id ) AND 
    p_all.id IN (21,10,42,84,234,15,251) AND 
    p_all.table_type = 'price' AND p_all.room_type='d' AND 
    p_all.year = '2012'
order by p_all.room_type='d'

请提供一些信息,我们如何根据最高到最低订购房型(价格)。

info =存储的身份证和酒店信息 p_all =具有相同id(info)的月份表,其中包含价格信息(table_type),房间(room_type),年份(2012)

4 个答案:

答案 0 :(得分:1)

您的ORDER BY子句必须包含您想要订购的内容。

SELECT info.* 
FROM   p_all, 
       resinfo 
WHERE  ( p_all.id = info.id ) 
       AND p_all.id IN ( 21, 10, 42, 84, 
                         234, 15, 251 ) 
       AND p_all.table_type = 'price' 
       AND p_all.room_type = 'd' 
       AND p_all.YEAR = '2012' 
ORDER  BY p_all.price DESC 

答案 1 :(得分:1)

正如其他人所说,您不能通过比较(p_all.room_type='d')来订购。您需要按实际值排序。如果你想(p_all.room_type='d')先来,你可以尝试以下方法吗?

ORDER BY
  (CASE WHEN p_all.room_type='d' THEN 0 ELSE 1 END) ASC

答案 2 :(得分:1)

订购很简单,您只需在关键字ORDER BY之后列出要订购的字段。您没有说明哪个列实际上包含价格(您在问题的不同位置说room_typetable_type)但是假设价格在table_type中你会使用方法:

 ORDER BY p_all.table_type DESC

(DESC,代表“降序”意味着排序将从最高到最低)。

你还必须处理这样一个事实:你在结果中引用info作为一个表,但SELECT中没有包含这样的表(可能你的意思是resinfo?)。< / p>

如果你展示了原始的表格结构,或者每个都有一些记录,那将会很有帮助。

答案 3 :(得分:0)

From p_all,resinfo - 这不正确。使用join加入另一个表。 http://dev.mysql.com/doc/refman/5.0/en/join.html

也不允许在ORDER BY子句中进行任何分配。如果要向后排序,请使用ASC http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html