这是我曾经想过的复杂查询。我知道这将是一个更愚蠢的问题。
我有一个id的数组,里面有超过100个id。我想从数据库中获取所有内容,但首先是等于id的列表,之后我想要剩下的。
我的尝试:
PHP:
$arr = array(3,1,4);
sort($arr)
$implodedArr = implode(" || id = ", $arr);
MySQL的:
SELECT * FROM tablename WHERE id = implodedArr;
我不认为我做的事情是对的。
答案 0 :(得分: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;