繁体   English   中英

根据数组顺序查询数据库/根据另一个数组的值对数组进行排序

[英]Query DB based off array order / sort array based off another array's values

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

我有一组ID,如下所示:

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

现在,这些是我数据库中行的ID(主键)。 我需要获取所有这些信息,同时保持该顺序。 我可以很好地查询数据库,并获得结果,但是我不知道如何维护该顺序。 所以结果是我希望能够遍历结果并按此特定顺序吐出信息。

有没有办法告诉MYSQLI查询通过该数组对ID进行排序? 或一旦获得结果,是否有办法重新排序结果以反映给定数组中的顺序?

用这个

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

因此,您将获得与任何id匹配的行并将其ascending排列。

我设法解决了我的问题。

$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,一个数组具有比另一个数组更多的信息。 因此,顺序(最外层的循环)每次都会匹配。 这使我可以将整个数据库结果按我的$ list数组的顺序放置在一个数组中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM