基于另一个数组的值,基于数组顺序/排序数组查询数据库

时间:2016-12-20 02:57:55

标签: php mysql

所以我觉得有一个简单的解决方案,但我的想法是空白的。

我有一系列ID,如下所示:

//array in no particular order    
$arr1 = array(456, 5, 9, 2, 470, 3);

现在,这些是我的数据库中行的ID(主键)。我需要在保持该顺序的同时获取所有这些信息。我可以很好地查询数据库,并获得结果,但我无法弄清楚的是如何维护该顺序。所以结果是我希望能够迭代结果并按照这个特定的顺序吐出信息。

有没有办法告诉MYSQLI查询按此数组对ID进行排序?或者一旦我得到结果,有没有办法重新排序结果以反映给定数组中的顺序?

2 个答案:

答案 0 :(得分:0)

使用此

SELECT * FROM table WHERE id IN (5,9,17,19,456) ORDER BY id ASC;

因此,您将获得与任何id匹配的行,并对其进行排序ascending

答案 1 :(得分:0)

我设法解决了我的问题。

$unorderedArray = array();
$orderedArray = array();
while($a = mysqli_fetch_assoc($r)) {
    array_push($unorderedArray, $a);
}
for($i = 0; $i < sizeof($list); $i++) {
    for($ii = 0; $ii < sizeof($unorderedArray); $ii++) {
        if($list[$i] == $unorderedArray[$ii]['id']) {
            array_push($orderedArray, $unorderedArray[$ii]);
        }
    }
}

首先,我从数据库中获取结果并使用它创建一个多维数组,以便更容易使用。然后我遍历第一个数组,这是我想要的顺序,并循环遍历结果数组。当匹配时,我将其推入新构造的数组中。

订单被保留,因为数组具有相同的ID,一个只有另一个的信息。所以订单,最外面的循环,每次都会匹配。这允许我将整个DB结果放入一个数组,其顺序为my $ list array。