如何用php比较两个表并返回不匹配的结果

wtlkbnrh  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(273)

我下面有两张表,上面都是名单。
表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

表2

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

如何比较表1的所有名称与表2的所有名称并返回所有不匹配的名称。我想实现它将返回表1中所有不在表2中的名称。
我需要这个做作业,但我不知道从哪里开始。如果有人能帮忙我会很感激的。
编辑:
现在我得到了这个,我试着用不同的方式打印结果,但是它不返回名称,它只返回“null”。

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

r7knjye21#

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

$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\u行和$table2\u行,就可以使用这个数组之间的差异函数(array\u diff\u assoc用于关联数组,array\u diff用于标准数组) $array_of_different_indexes = array_diff($table1_rows,$table2_rows); array_diff函数非常方便,这里有一个链接https://secure.php.net/manual/en/function.array-diff.php

ss2ws0br

ss2ws0br2#

您可以直接在sql中执行
您可以使用left join并检查空值

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

lkaoscv73#

正如您在描述“表1中所有不在表2中的名称”中所述,您可以执行以下操作:

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

这里有一把小提琴:http://sqlfiddle.com/#!9/e87c78/1号

相关问题