根据给定数组的顺序对所选键进行排序

时间:2017-05-22 14:12:35

标签: mysql sql mysqli

我在函数中有以下代码。 我的问题是,当我得到结果时,如何保持我的数组顺序“(8,7,6)”?

$sql = "SELECT table1.id FROM table1
            join table2
            on table1.id = table2.number
            WHERE table2.id IN (8,7,6)
            GROUP BY table1.id
            HAVING COUNT(DISTINCT table1.id)";

            $result = $this->conn->query( $sql );

            while($row = mysqli_fetch_assoc($result))
            $returnArray[] = $row; 

            return $returnArray;

换句话说,如何根据table1中初始数组索引的等价物来重新排序returnArray。

let say if 
8 = table1.id 4 
7 = table1.id 2
6 = table1.id 1

我得到的那一刻(1,2,4) 我喜欢(4,2,1)

1 个答案:

答案 0 :(得分:0)

这取决于IN数组的排序方式。如果总是排序,就像上面的例子一样,这将起作用:

    SELECT table1.id FROM table1
    join table2
    on table1.id = table2.number
    WHERE table2.id IN (8,7,6)
    GROUP BY table1.id
    HAVING COUNT(DISTINCT table1.id)
    ORDER BY table2.id DESC

如果值可以是非排序顺序,那么您需要为可以排序的列赋值。

一个硬编码的例子是:

    SELECT table1.id, 
            CASE WHEN table2.id = 8 THEN 1
            WHEN table2.id = 7 THEN 2
            WHEN table2.id = 6 THEN 3
            ELSE 99 END as ordering
    FROM table1
    join table2
    on table1.id = table2.number
    WHERE table2.id IN (7,6,8)
    GROUP BY table1.id
    HAVING COUNT(DISTINCT table1.id)
    ORDER BY ordering

如果两个工作都没有,你需要一个临时表来插入值和另一个值与排序顺序,然后你加入该表并按排序值排序。

如果这不起作用,请添加有关您需求的更多信息。