Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 我可以按价值订购吗_Mysql_Sql - Fatal编程技术网

Mysql 我可以按价值订购吗

Mysql 我可以按价值订购吗,mysql,sql,Mysql,Sql,我可以按IN查询的值进行排序吗 下面的默认值为“order item_id Lower first”,但我实际上希望按输入的顺序排序。。。这可能吗 e、 g 我想返回: item_id item_title item_source ------- ---------- ----------- 1676 item_a source_a 1559 item_f source_f 1672 item_c

我可以按IN查询的值进行排序吗

下面的默认值为“order item_id Lower first”,但我实际上希望按输入的顺序排序。。。这可能吗

e、 g

我想返回:

item_id     item_title    item_source
-------     ----------    -----------
1676        item_a        source_a
1559        item_f        source_f
1672        item_c        source_c

您需要一个自定义的
按案例排序
,以便对每个可能的值应用排序等级。显然,随着集合大小的增加,这变得很困难

select
  item_id, 
  item_title, 
  item_source 
from items
where item_id IN ('1676','1559','1672')
/* Custom ORDER BY applies lower order numbers to the lowest value, etc... */
ORDER BY 
  CASE 
    WHEN item_id = 1676 THEN 0
    WHEN item_id = 1559 THEN 1
    WHEN item_id = 1672 THEN 2
    /* If you had others (which you don't because they're limited by the IN() clause, include an ELSE */
    ELSE 99
  END,
  /* Then complete the ORDER BY with other cols to order on as needed... */
  item_source

您可以在中的谓词中加入这些值,如下所示:

SELECT 
  i.item_id,
  i.item_title
  i.item_source
FROM items i
INNER JOIN
(
   SELECT 0 sortid, 1676 id
   UNION ALL
   SELECT 1,        1559 
   UNION ALL
   SELECT 2,        1672
) t ON i.item_id = t.id
ORDER BY t.sortid

您可以考虑使用<代码> FungInIn集合或<代码>字段< /代码>函数来组织您的结果,如果您已经事先知道了IDS。

SELECT 
    item_id,
    item_title,
    item_source
FROM items
WHERE item_id IN ('1676','1559','1672')
ORDER BY FIELD(item_id, '1676', '1559', '1672')


当然,缺点是您要指定两次ID。不过,我认为几乎所有合理执行的解决方案都会这样做。解决这个问题的唯一方法是使用排序顺序字段或类似的内容。

巧妙的解决方案!我想知道是否有更通用的方法。如果您在in子句中使用另一个select语句的结果,该怎么办?@titusn如果您在(select…中使用
,则可以将其转换为
内部联接
,然后对联接表的一列进行排序。@titusn通常,无论查询是如何构造的,如果您需要构造一个非标准的排序,您需要在某个地方使用
按案例排序
构造,以使其具有确定性。目前为止,最干净的解决方案是,双击ID并不是一个繁重的资源查询-非常感谢!
SELECT 
    item_id,
    item_title,
    item_source
FROM items
WHERE item_id IN ('1676','1559','1672')
ORDER BY FIELD(item_id, '1676', '1559', '1672')
ORDER BY FIND_IN_SET(item_id, '1676,1559,1672')