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

Форум для тех кто начинает осваивать язык php.
Аватара пользователя
Slash
Администратор
Сообщения: 2029
Поблагодарили: 62 раза

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

Сообщение Slash » Чт окт 15, 2015 10:56 pm

Недавно пришлось искать лишние записи в двух связанных таблицах.
Две связанные таблицы должны иметь одинаковое количество записей, id в одной таблице должен совпадать с id из второй таблицы. Но случилось так, что в одной таблицы было больше записей. Оно как бы и не мешает, но мне ужасно не нравится мусор, который ни где не используется, по этому я решил найти все записи, которые есть в одной таблице, но нет в другой. Делать это в ручную очень трудно, так как записей много. Для поиска я написал сценарий похожий на сценарий из темы Удаление файлов с сервера, которые не записаны в БД, только там ищет файлы не записанные в БД, а тут сравнивает две таблицы.
Запустил сценарий и на экране появились id записей, которые были лишними.
В общем сам код:

Код: Выделить всё

<?php
# Сравнить количество записей в двух таблицах
# http://danfa.org/

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);

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

Вернуться в «PHP»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость