gpt4 book ai didi

php - 将 PHP 数组的值与大型表 MySQL 进行比较

转载 作者:行者123 更新时间:2023-11-30 22:30:40 25 4
gpt4 key购买 nike

好吧,如果我只比较几个值,通常我会在 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 - 内存耗尽

最佳答案

您可以在 PHP 中加入数组$a 中的变量,并在您的SQL 查询中使用它来检索数据,它将在你的情况下有效。

$in = join(',', array_fill(0, count($a), '?'));
$sql = "
SELECT *
FROM galleries
WHERE id IN ($in)"

这是一个有效的 fiddle证明 SQL 查询将返回所需的输出。

编辑:

According your new requirement, You could do the array comparison in the PHP side because You have to somehow bring up the result from MySQL to eliminate the result from PHP array. If you retrieve the array $a from another table then we could have done something like a join. But in this case we cannot do it. Also you mentioned that the MySQL table has large number of rows so I assume PHP array will anyway remove only couple of items from the results after bringing it to the memory.

关于php - 将 PHP 数组的值与大型表 MySQL 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33965225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com