1

这是我曾经想过的复杂查询。我知道这将是一个更愚蠢的问题。

我有一个 id 数组,里面有 100 多个 id。我想从数据库中获取所有内容,但首先是等于 id 的列表,然后我想要剩余的。

我的尝试:

PHP:

$arr = array(3,1,4);
sort($arr)
$implodedArr = implode(" || id = ", $arr);

mysql:

SELECT * FROM tablename WHERE id = implodedArr;

我不认为我所做的一切都是正确的。

4

1 回答 1

2

尝试这个。首先的策略是使用IN运算符,而不是大量的连接OR语句——这应该更快。然后,我们可以使用UNION合并未出现在第一组中的那些。

我已将搜索结果标记为具有“important=1”的虚拟列,用于排序目的,但如果您愿意,可以将其更改为更有意义的内容。

PHP:

$arr = array(3,1,4);
sort($arr)
$implodedArr = implode(",", $arr);

MySQL:

SELECT
    *, 1 AS important FROM tablename WHERE id IN ($implodedArray)
UNION
SELECT
    *, 0 AS important FROM tablename WHERE id NOT IN ($implodedArray)
ORDER BY
    /* You can order by other fields after "important" if you wish */
    important DESC;
于 2013-10-27T08:27:03.643 回答