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






Вы можете делать прямо в 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
Функционально, но, вероятно, лучше обрабатывать на уровне базы данных, так как это может стать действительно беспорядочным для большого количества записей.
Как вы уже указали в своем описании "все имена из таблицы 1, которых нет в таблице 2", вы можете:
SELECT `name` from `table1`
WHERE `name` not in (SELECT `name` from `table2`)
вот рабочий пример: http://sqlfiddle.com/#!9/e87c78/1
Привет, я попытался поместить это в код PHP, потому что я хочу отобразить его на веб-странице, но он просто возвращает «NULL», а не имена. Я отредактировал свой пост тем, что у меня есть сейчас.
после РЕДАКТИРОВАТЬ: если это ваш полный код, значит, вам не хватает mysqli_query($databaseConnection, $sql) перед извлечением (из результата!). Пожалуйста, обратитесь к руководство за примерами.
что-то вроде
...WHERE name not in (Select name from table2)