好吧,如果我只比较几个值,通常我会在PHP中做这样的事情:
// I want to get 1
$a = array(1,2);
$b = array(2);
// It produces 1
$result = array_diff($a, $b);
但是在这种情况下,$b
是MySQL中一个包含数百万行的大表,并且将其检索到PHP会很疯狂,因此我的DBMS(MySQL)必须完成这项工作。
我怎么能这样做:
-- I need treating $a as a column
SELECT $a NOT IN (SELECT id FROM b);
示例
表B
|id|
2
3
4
数组A
array(1, 2, 3, 5);
结果
A - B = A - INTERSECT(A,B) = [1, 5]
示例2
This is正是我对SQL服务器的需求。有什么想法在MySQL中做类似的事情吗?
注意:A有大约5000个ID,所以:
SELECT 1
UNION SELECT 1
UNION SELECT 1
UNION SELECT 2
UNION SELECT 5
...
...生成#1064 - memory exhausted
答案 0 :(得分:0)
你可以join
PHP中数组$a
中的变量,并在SQL
查询中使用它来检索数据,在你的情况下它会很有效。
$in = join(',', array_fill(0, count($a), '?'));
$sql = "
SELECT *
FROM galleries
WHERE id IN ($in)"
这是一个有效的fiddle来证明SQL
查询将返回所需的输出。
编辑:
根据您的新要求,您可以进行数组比较 PHP方面,因为你必须以某种方式提出结果 MySQL消除PHP数组的结果。如果你检索 来自另一个表的数组
$a
然后我们可以做类似的事情 加入。但在这种情况下,我们不能这样做。你还提到了那个 MySQL表有很多行,所以我认为PHP数组无论如何都会 将它带到后,只从结果中删除几个项目 存储器中。
答案 1 :(得分:0)
如果要检查值是否存在,可以试试这个
<?php
$some_id = "100";
$id = mysql_real_escape_string($some_id); // i use escape to compare IP ADDRESSES. you can remove it
$result = mysql_query("SELECT id FROM your_table WHERE id = '$id'");
if (!mysql_num_rows($result))
{
echo "Not Exists";
}
else
{
echo "Exists";
}
?>
我希望这会有所帮助
答案 2 :(得分:0)
考虑使用JOIN NULL查询:
strSQL = "SELECT t2.id
FROM tableB t1
RIGHT JOIN
(SELECT id
FROM tableB
WHERE id IN (".implode(',',$arrayA).")
) t2
ON t1.id = t2.id
WHERE t1.id IS NULL";
此外,根据$arrayA
的大小,请考虑附加到临时表并加入上面的内容,将子查询替换为临时表。