MySQL táblából duplikált sorok törlése
2021-12-20T00:04:36+01:00
2021-12-20T00:22:28+01:00
2022-08-12T06:20:29+02:00
*deleted_23419333
Sziasztok!

Adott ez a MySQL tábla:

CREATE TABLE `posts` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `post_id` INT NOT NULL );

Adatok:

INSERT INTO `posts` ( `id`, `post_id` ) VALUES ( 1, 404 ); INSERT INTO `posts` ( `id`, `post_id` ) VALUES ( 2, 404 ); INSERT INTO `posts` ( `id`, `post_id` ) VALUES ( 3, 404 ); INSERT INTO `posts` ( `id`, `post_id` ) VALUES ( 4, 120 ); INSERT INTO `posts` ( `id`, `post_id` ) VALUES ( 5, 120 ); INSERT INTO `posts` ( `id`, `post_id` ) VALUES ( 6, 300 );

A duplikált sorokat szeretném törölni, mindig úgy, hogy a legnagyobb `id` maradjon meg, vagyis ezek:

INSERT INTO `posts` ( `id`, `post_id` ) VALUES ( 3, 404 ); INSERT INTO `posts` ( `id`, `post_id` ) VALUES ( 5, 120 ); INSERT INTO `posts` ( `id`, `post_id` ) VALUES ( 6, 300 );

PHP:

<?php $mysqli = new mysqli( 'localhost', 'my_user', 'my_password', 'my_db' ); // $mysqli-> query( "DELETE FROM `posts`" ); ?>

Ha van rá lehetőség, akkor egy lekérdezéssel szeretném megoldani ezt a problémát.
Mutasd a teljes hozzászólást!
How To Delete Duplicate Rows in MySQL

Ez alapján ez a kis query pont azt fogja csinálni, hogy a duplikált sorokat törli, és megőrzi azt, amelyiknek az ID-ja a legnagyobb.

DELETE t1 FROM posts t1 INNER JOIN posts t2 WHERE t1.id < t2.id AND t1.post_id = t2.post_id;
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd