Поиск лишних записей в связанных таблицах (PHP SQL)
13.07.2017 10:11:18 am
Недавно пришлось искать лишние записи в двух связанных таблицах.
Две связанные таблицы должны иметь одинаковое количество записей, id в одной таблице должен совпадать с id из второй таблицы. Но случилось так, что в одной таблицы было больше записей. Оно как бы и не мешает, но мне ужасно не нравится мусор, который ни где не используется, по этому я решил найти все записи, которые есть в одной таблице, но нет в другой. Делать это в ручную очень трудно, так как записей много.
Запустил сценарий и на экране появились id записей, которые были лишними.
В общем сам код:
Для сравнения своих таблиц, замените в запросах
Сценарий выведет на экран записи, которые есть во второй, но нет в первой таблице. Затем переменные в строчке:
Можно поменять местами, что бы увидеть какие записи есть в первой таблице, которых нет во второй.
Две связанные таблицы должны иметь одинаковое количество записей, 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);
Можно поменять местами, что бы увидеть какие записи есть в первой таблице, которых нет во второй.
- Жалоба