使用 MySQL 从表中获取特定列表,然后获取剩余的列表

Posted

技术标签:

【中文标题】使用 MySQL 从表中获取特定列表,然后获取剩余的列表【英文标题】:Fetch a particular list from table and fetch the remaining afterwards, using MySQL 【发布时间】:2013-11-06 02:48:35 【问题描述】:

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

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

我的尝试:

php

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

mysql

SELECT * FROM tablename WHERE id = implodedArr;

我认为我所做的一切都不对。

【问题讨论】:

【参考方案1】:

试试这个。首先的策略是使用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;

【讨论】:

以上是关于使用 MySQL 从表中获取特定列表,然后获取剩余的列表的主要内容,如果未能解决你的问题,请参考以下文章

从表中获取某一列的十大列表

使用 python 和 mysql.connector 从表中获取数据

从表中获取特定用户的所有行以及总和

MySQL:PHP:由于警告,无法从表中获取数据

根据特定条件从表中获取已插入数据的插入查询

将数据从表插入临时表,然后从临时表中选择特定行