【问题标题】:How to find all records which are NOT in this array? (MySql)如何查找不在此数组中的所有记录? (MySql)
【发布时间】:2011-03-30 03:21:54
【问题描述】:

我有一个数组,其中包含一堆 ID:s...

我不知道如何在 mysql 中编写查询来查找不在此数组中的所有记录。

    SELECT * FROM main_table WHERE ..........

有什么想法吗?

谢谢

【问题讨论】:

    标签: php sql mysql html database


    【解决方案1】:

    像这样:

    $str = implode(',', $your_array);
    

    上述语句将数组转换为逗号分隔的字符串。

    "SELECT * FROM main_table WHERE id NOT IN ('$str')"
    

    更多信息:

    【讨论】:

    • 小调整:$str = count($your_array) != 0 ? implode(',', $your_array); : "null";IN 对空括号反应不佳。
    • 我也是这么做的。但随着我的阵列大小增加,我收到“MySQL 服务器已消失”错误。我找到了几个解决方案,如何调整 MySQL 以处理此类请求,但我觉得这个解决方案不太适合大型数组。
    • 我尝试将这条 sql 语句应用于 WordPress wp_users 表和 user_email 字段,以逗号分隔的五个电子邮件地址的字符串作为列表。它不起作用,返回所有电子邮件地址。我刚刚发现它不起作用,因为列表(或者如果您使用 implode())没有用 ' (打开和关闭撇号)包装每个列表项。因此, implode(",",$str) 产生“user1@gmail.com,user2@mydomain.com,user3@mydomain.com”。这使sql失败。该列表必须像这样构造:WHERE user_email NOT IN ('user1@gmail.com','user2@mydomain.com','user3@mydomain.com')";
    【解决方案2】:
    SELECT * 
      FROM main_table
     WHERE id NOT IN(1, 2, 3)
    

    【讨论】:

    • 只有代码的答案在 Stackoverflow 上的价值很低。
    猜你喜欢
    • 1970-01-01
    • 2012-05-03
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 2017-09-27
    • 1970-01-01
    相关资源
    最近更新 更多