Как сравнить две таблицы и вернуть несоответствия с PHP

У меня есть 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

Таблица 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

Как мне сравнить все имена 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);

что-то вроде ...WHERE name not in (Select name from table2)

Jeff 23.08.2018 21:36

после РЕДАКТИРОВАТЬ: если это ваш полный код, значит, вам не хватает mysqli_query($databaseConnection, $sql) перед извлечением (из результата!). Пожалуйста, обратитесь к руководство за примерами.

Jeff 23.08.2018 23:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
30
3

Ответы 3

Вы можете делать прямо в SQL

Вы можете использовать левое соединение и проверить нулевые значения

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

Я думаю, вы могли бы запросить, чтобы получить все данные из каждой таблицы и для каждой строки, сохранить как ассоциативный массив или просто обычный массив в общий массив, как показано ниже.

$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

Функционально, но, вероятно, лучше обрабатывать на уровне базы данных, так как это может стать действительно беспорядочным для большого количества записей.

tadman 23.08.2018 21:49

Как вы уже указали в своем описании "все имена из таблицы 1, которых нет в таблице 2", вы можете:

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

вот рабочий пример: http://sqlfiddle.com/#!9/e87c78/1

Привет, я попытался поместить это в код PHP, потому что я хочу отобразить его на веб-странице, но он просто возвращает «NULL», а не имена. Я отредактировал свой пост тем, что у меня есть сейчас.

JF058 23.08.2018 22:40

после РЕДАКТИРОВАТЬ: если это ваш полный код, значит, вам не хватает mysqli_query($databaseConnection, $sql) перед извлечением (из результата!). Пожалуйста, обратитесь к руководство за примерами.

Jeff 23.08.2018 23:13

Другие вопросы по теме