如何比较两个表并使用PHP返回不匹配项

时间:2018-08-23 19:29:45

标签: php html mysql database

我下面有2张桌子,都有两个名字列表。

表1

id  name            joined_on
1   Daniel Smith    2018-07-01 00:00:00
2   James Owen      2018-07-03 00:00:00
3   Dave John       2018-04-04 00:00:00
4   Dean Davidson   2018-02-01 00:00:00
5   James Saunders  2018-07-04 01:05:02
6   Earl Smith      2018-07-04 01:05:19
7   Faud Earl       2018-07-04 01:07:46
8   Casper James    2018-05-01 00:00:00

table2

id  name            joined_on
1   Daniel Smith    2018-07-04 00:00:00
2   James Owen      2018-07-04 01:04:03
3   Dale Davidson   2018-02-02 00:00:00
4   Faud Earl       2018-05-15 00:00:00
5   Casper James    2018-05-26 00:00:00
6   Dave John       2018-07-04 01:05:10

如何将table1的所有名称与table2的所有名称进行比较,并返回所有不匹配项。我想实现它将返回table1中所有不在table2中的名称。

我需要这个来完成学校作业,但我只是不知道从哪里开始。如果有人可以帮忙,我将不胜感激。

编辑:

现在我明白了,我尝试以不同的方式打印结果,但是它不返回名称,只返回“ NULL”。

$sql = "SELECT name from Players_christmas where name not in (select name from Players_halloween";
$assoc = mysqli_fetch_assoc($sql);
var_dump($assoc);

3 个答案:

答案 0 :(得分:1)

您可以直接在SQL中进行

您可以使用左连接并检查空值

  select name from table1 
  left join table2 on table1.name = table2.name 
  where t2.name is null 

答案 1 :(得分:0)

我认为您可以查询以获取每个表和每一行的所有数据,将其存储为关联数组或仅将常规数组存储到整体数组中,如下所示。

$sql = "SELECT * FROM your_table1";
        $result = $conn->query($sql);

        if ($result->num_rows > 0) {
                // output data of each row
                while($row = $result->fetch_assoc()) {
                    $table1_rows[$i] = $row;
                    $i++;
                }

然后,当您同时拥有$ table1_rows和$ table2_rows时,就可以使用数组函数之间的这种区别(关联数组使用array_diff_assoc,标准数组使用array_diff)

$array_of_different_indexes = array_diff($table1_rows,$table2_rows);

array_diff函数非常方便,这是它的链接 https://secure.php.net/manual/en/function.array-diff.php

答案 2 :(得分:0)

就像描述中已经有的那样:“表1中所有不在表2中的名称” ,您可以这样做:

SELECT `name` from `table1` 
WHERE `name` not in (SELECT `name` from `table2`)

这是一个小提琴:http://sqlfiddle.com/#!9/e87c78/1