首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择不在表中的值

选择不在表中的值
EN

Stack Overflow用户
提问于 2012-01-12 09:10:35
回答 6查看 1K关注 0票数 3

假设我在PHP中有三个值:"a“、"b”、"c“。不管是在数组中还是逗号分隔的字符串中。

数据库中有一个表:

代码语言:javascript
运行
复制
id | value  
1  | a  
2  | b  
3  | d  

我的目的是查找php数组中的值,而不是数据库表中的值。

给出的例子将给出"c“。

我只能用一个查询来完成它吗?

更新

在关于array_diff()的回答中收到了一些很好的建议,不过在我的例子中,DB表非常大,数组的项不超过5-6项。所以我认为执行5-6个查询会更好。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-01-12 09:22:34

如果PHP数组很短,您可以构建一个UNION ALL查询来构建您的小表,然后对大型表使用NOT INLEFT JOIN查询(以哪种查询速度更快):

代码语言:javascript
运行
复制
SELECT value
FROM (
    SELECT 'a' AS value
    UNION ALL
    SELECT 'b'
    UNION ALL
    SELECT 'c'
) AS php_array_values
WHERE value NOT IN (
    SELECT value
    FROM that_large_table
);

或者,您可以在临时表中插入php数组值,并使用INJOIN查询。当然,这意味着您最终需要编写三个额外的查询:

代码语言:javascript
运行
复制
CREATE TEMPORARY TABLE IF NOT EXISTS php_array_values (value VARCHAR(100));

DELETE FROM php_array_values;

INSERT INTO php_array_values VALUES ('a'), ('b'), ('c');

SELECT php_array_values.value
FROM php_array_values
LEFT JOIN that_large_table ON php_array_values.value = that_large_table.value
WHERE that_large_table.value IS NULL
票数 5
EN

Stack Overflow用户

发布于 2012-01-12 09:59:38

这个怎么样?

代码语言:javascript
运行
复制
<?php
    $a = array('a', 'b', 'c');
    $values = implode("','", $a);
    $sql = "SELECT DISTINCT `value` FROM `mytable` WHERE `value` IN ('$values')";
    echo $sql;

执行sql查询。结果将是您已经拥有的0到3个元素。接下来,执行一个array_diff (它不会太重,因为您将拥有初始的小数组,而db中的数组则更小)。

代码语言:javascript
运行
复制
$not_in_db = array_diff($a, $array_from_sql_result);

如果您所拥有的是一个带有逗号分隔值的字符串,那么您需要首先“引爆”它:

代码语言:javascript
运行
复制
$s = "a,b,c";
$a = explode(",", $s);
票数 2
EN

Stack Overflow用户

发布于 2012-01-12 09:13:50

您可以选择表中的所有条目,然后执行array_diff()

但这不是一个查询,而是一个查询和一些后处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8832465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档