Бывают случаи, когда нужно сделать уникальный индекс по столбцу, но не получается его создать, так как данные в столбце не уникальны.
В этом случае, чтобы узнать какие строки повторяются делаем такой запрос:
SELECT * FROM `table`, (SELECT `id`, `url` FROM `table`) as t1 WHERE `table`.`url` = t1.`url` AND `table`.`id` != t1.`id`
Так мы узнаем повторяющие строки в столбце url.
Если нужны не уникальные строки по двум и более столбцам, то немного меняем запрос:
SELECT * FROM `table`, (SELECT `id`, `url`, `name` FROM `table`) as t1 WHERE `table`.`url` = t1.`url` AND `table`.`name` = t1.`name` AND `table`.`id` != t1.`id`
Так мы узнаем повторяющие строки в столбцах url, name.
Можно еще использовать такой способ удаления повторяющихся записей:
for ($i=0; $i < 5; $i++) { $sql = "DELETE FROM `map_lev4_street` WHERE `id` IN (SELECT `id` FROM (SELECT id, COUNT(*) as c FROM (SELECT id_region, id_city, id_index, map_lev4_street.url, MAX(map_lev4_street.id) as id FROM map_lev5_house JOIN map_lev4_street ON map_lev5_house.id_street = map_lev4_street.id GROUP BY id_region, id_city, id_index, map_lev4_street.url) AS t1 GROUP BY id HAVING c > 1) AS t2)"; $result = $db->query($sql) or die(mysqli_error($db)); }