按添加的 WHERE 条件的顺序对 SQL 输出进行排序

Posted

技术标签:

【中文标题】按添加的 WHERE 条件的顺序对 SQL 输出进行排序【英文标题】:Sort SQL output by the order of added WHERE conditions 【发布时间】:2013-09-04 08:50:27 【问题描述】:

如何通过外部条件或例如对 SQL 输出中的值进行排序添加 WHERE 条件的顺序?

首先,我使用“json_decode foreach 循环”生成多个 ID

$itemid = '';
$arr = json_decode($string,true);
foreach($arr['feed']['entry'] as $val)

$itemid .= " OR `item_id` = ".$val['id']['att']['ix:id'];

输出例如(简体)

`item_id` = 2
OR `item_id` = 3
OR `item_id` = 1

这里的输出顺序对我来说很重要。 2是第一个位置的ID,3是第二个位置的ID,以此类推。

在下一步中,我使用 mysql 语句中的所有 ID 来提取每个 ID 的信息

$sql = "
SELECT *
FROM `itemtable`
WHERE $itemid
";

哪个更具可读性:

$sql = "
SELECT *
FROM `itemtable`
WHERE `item_id` = 2
OR `item_id` = 3
OR `item_id` = 1
";

SQL 输出现在按 ID ASC 的顺序排列

+-------+-----------+
|   ID  |   INFO    |
+-------+-----------+
|   1   | something |
+-------+-----------+
|   2   | something |
+-------+-----------+
|   3   | something |
+-------+-----------+

但我需要按照 json_decode 生成 ID 的顺序来获取信息:

+-------+-----------+
|   ID  |   INFO    |
+-------+-----------+
|   2   | something |
+-------+-----------+
|   3   | something |
+-------+-----------+
|   1   | something |
+-------+-----------+

我在同一个 php 脚本中使用另一个 foreach 循环输出接收到的数据:

$output = '';
foreach ($xpdo->query($sql) as $row) 
        $output .=  $row['ID']
            .$row['INFO']
        ."</br>";

return $output;

我怎样才能让输出按 json_decode 的顺序排列?其实我不介意排序发生在 SQL 语句或 PHP 中。

编辑:Fluffeh 的解决方案

将json_decode修改为+,为第一个条目添加一个IF条件,去掉这里的“union all”。

$itemid = '';
$arr = json_decode($string,true);
foreach($arr['feed']['entry'] as $val)

$itemid .= "union all 
SELECT * FROM `itemtable` 
WHERE `item_id` = ".$val['id']['att']['ix:id'];

【问题讨论】:

【参考方案1】:

技术上你不能,但如果查询不是太糟糕,你可以编写一些代码来做到这一点:

$sql = "
SELECT *
    FROM `itemtable`
WHERE $itemid1
union all
SELECT *
    FROM `itemtable`
WHERE $itemid2
";

如果你把一些 PHP 加入查询中,它会很容易工作。

当您运行联合查询时,数据将按照查询本身的顺序返回。

【讨论】:

以上是关于按添加的 WHERE 条件的顺序对 SQL 输出进行排序的主要内容,如果未能解决你的问题,请参考以下文章

php sql 中WHERE 的条件:IN(3,2,5,8) 结果如何按IN中的顺序排序

SQL where 条件顺序对性能的影响有哪些

按查询的where子句中的字段顺序对sql查询的结果进行排序

sql中语句的执行顺序

sql中语句的执行顺序

SQL 之 ON 和 WHERE执行顺序