Поиск лишних записей в связанных таблицах (PHP SQL)

10:11 13.07.2017
Недавно пришлось искать лишние записи в двух связанных таблицах.
Две связанные таблицы должны иметь одинаковое количество записей, id в одной таблице должен совпадать с id из второй таблицы. Но случилось так, что в одной таблицы было больше записей. Оно как бы и не мешает, но мне ужасно не нравится мусор, который ни где не используется, по этому я решил найти все записи, которые есть в одной таблице, но нет в другой. Делать это в ручную очень трудно, так как записей много.
Запустил сценарий и на экране появились id записей, которые были лишними.
В общем сам код:
<?php
# Сравнить количество записей в двух таблицах
# https://danfa.net/

header('Content-Type: text/html; charset=utf-8');

# Доступ к БД
$dbhost    = '';
$dbuser    = '';
$dbpasswd  = '';
$dbname    = '';

$connect = mysqli_connect($dbhost, $dbuser, $dbpasswd, $dbname);
if (!$connect)
{
    exit('Error MySQL');
}

$sql = 'SELECT *
	FROM table_1';
$query = mysqli_query($connect, $sql);
if (!$query)
{
    exit('Error MySQL');
}

while($row = mysqli_fetch_assoc($query))
{
    $table_1[] = $row['id'];
}

$sql = 'SELECT *
	FROM table_2';
$query = mysqli_query($connect, $sql);
if (!$query)
{
    exit('Error MySQL');
}

while($row = mysqli_fetch_assoc($query))
{
    $table_2[] = $row['id'];
}

echo 'Таблица table_1 - ' . count($table_1) . '<br />';
echo 'Таблица table_2 - ' . count($table_2) . '<br />';

if (count($table_1) != count($table_2))
{
    $diff = array_diff($table_2, $table_1);
    foreach ($diff as $id)
    {
        echo $id . '<br />';
    }
}
else
{
    echo 'Лишних записей не найдено!';
}

Для сравнения своих таблиц, замените в запросах table_1 и table_2 на названия своих таблиц.
Сценарий выведет на экран записи, которые есть во второй, но нет в первой таблице. Затем переменные в строчке:
    $diff = array_diff($table_2, $table_1);

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