我有一个网站与活动,我有两个重要的表,一个与所有地址的第一个通讯和一个为注册用户。
现在我想提醒所有没有注册的地址。
我的想法是比较两个表(tbl_adresses
和tbl_registered_usr
)中的电子邮件地址,并“删除”两个表中的所有电子邮件地址。
我的代码看起来像:
// Read records
$query = "SELECT email FROM wf_anlaesse WHERE anlaesseID = '$Datum'";
$query = mysql_query($query);
// Put them in array
for($i = 0; $array[$i] = mysql_fetch_assoc($query); $i++) ;
// Delete last empty one
array_pop($array);
print_r ($array);
echo "<br /><br /><br /><br />";
// Read records
$query2 = "SELECT email FROM wf_adressen";
$query2 = mysql_query($query2);
// Put them in array
for($i = 0; $array2[$i] = mysql_fetch_assoc($query2); $i++) ;
// Delete last empty one
array_pop($array2);
print_r ($array2);
echo "<br /><br /><br /><br />";
$result = array_diff($array, $array2);
print_r($result);
我的输出如下:
Array (
[0] => Array ( [email] => E-MAIL )
[1] => Array ( [email] => E-MAIL )
[2] => Array ( [email] => E-MAIL )
[3] => Array ( [email] => E-MAIL ) ... and so on
Array (
[0] => Array ( [email] => E-MAIL )
[1] => Array ( [email] => E-MAIL )
[2] => Array ( [email] => E-MAIL )
[3] => Array ( [email] => E-MAIL )`... and so on
Array ( )
array_diff
不起作用。有什么想法吗?
谢谢!
克里斯
最佳答案
在我看来,您需要左联接,它获取第一个(左)表中与条件匹配的所有值。使用IS NULL
可以指定第二个(右)表中不存在的值。
SELECT A.email
FROM wf_adressen A
LEFT JOIN wf_anlaesse B
ON A.email = B.email
WHERE B.email IS NULL
这将返回wfúu adressen中没有出现在wfúu anleasse中的所有电子邮件。
下面是一个使用PostgreSQL的示例:
CREATE TABLE wf_anlaesse (id SERIAL, email TEXT);
CREATE TABLE wf_adressen (id SERIAL, email TEXT, name TEXT);
INSERT INTO wf_adressen VALUES (DEFAULT, 'nikm@nikm.nikm', 'Nik M');
INSERT INTO wf_adressen VALUES (DEFAULT, 'nigelj@nigelj.com', 'Nigel J');
INSERT INTO wf_anlaesse VALUES (DEFAULT, 'nikm@nikm.nikm'); -- only Nik's received it
SELECT A.email
FROM wf_adressen A
LEFT JOIN wf_anlaesse B
ON A.email = B.email
WHERE B.email IS NULL;
email
-------------------
nigelj@nigelj.com
虽然MySQL在创建表和插入值方面可能不同,也可能不同,但我确信连接语法完全相同。
关于php - PHP-比较数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21383791/