在SQL或脚本

时间:2015-12-16 08:34:40

标签: php mysql

我需要从SQL查询结果中按ID排除某些行,但哪种方式更好?

主键id使用NOT IN:

SELECT id, key1, key2 FROM my_table WHERE id NOT IN (#EXCLUDE_IDS)

或者在脚本中查询后的后处理循环中:

 foreach ($rows as $i => $row) {
    if (isset($exclude[$row['id']])) {
      unset($rows[$i]);
    }
 }

 # or
 for ($i = count($rows) - 1; $i >= 0; $i--) {
    if (isset($exclude[$rows[$i]['id']])) {
      unset($rows[$i]);
    }
 }

3 个答案:

答案 0 :(得分:2)

您应该获取所需的数据。因此,在查询中执行此操作并排除id s是更好的选择。它还降低了执行力和成本。

答案 1 :(得分:1)

从数据库查询时,您只想获取所需的信息,这就是为什么您可以选择select语句中的列,并且能够使用where

中的条件的原因。

在这种情况下: 1.如果您想排除一个特定的主键,那么

SELECT ID, KEY1, KEY2 FROM TABLE WHERE ID != 1

2。如果它基于多个ID那么

SELECT ID, KEY1, KEY2 FROM TABLE WHERE ID NOT IN (ids)

3。如果您希望排除基于单独的查询,那么

SELECT ID, KEY1, KEY2 FROM TABLE WHERE ID NOT IN(
    SELECT  ID
    FROM    TABLE2
    WHERE   ID IS NOT NULL )

NOT IN的替代方案是'NOT EXISTS'

答案 2 :(得分:0)

您需要的是使用下一个clouse:

SELECT id, key1, key2 FROM my_table WHERE id NOT REGEXP '[regexp]';

regexp描述您要排除的ID列表。