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

时间:2013-09-04 08:50:28

标签: php mysql sql

如何通过外部条件或例如SQL输出对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个,依此类推。

在下一步中,我使用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 个答案:

答案 0 :(得分:1)

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

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

如果你把一些PHP加在一起加入查询,它将非常容易。

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