Próbafeladat közben összeakadtam egy problémával, mégpedig, hogy ki kéne törölni a dupla bejegyzéseket egy kapcsolótáblából. Oké, hogy insert ignore on duplicate key, de a bibi az, hogy nem insertkor kerül bele a duplicate key, hanem updatekor, ugyanis akik kérték azt kérték, hogy a kategória törlésekor az oda kapcsolt bejegyzések kerüljenek át a default kategória alá és sajna ahogy nézem update nem tudja ugyanezt az ignore dolgot. @mysql_unbuffered_query('DELETE FROM cat WHERE id="'.$_GET["delid"].'"');
@mysql_unbuffered_query('UPDATE cim_cat SET cat_id="0" WHERE cat_id="'.$_GET["delid"].'"'); Ennyi a kód, ami csinálja a duplikált sorokat. Értelemszerűen duplikáció akkor keletkezik, amikor a 0 alá is be van rendelve egy bejegyzés és törléskor a törölt kategória alatti bejegyzés átkerül oda. Szemléltetem:Előtte:
cim_id | cat_id |
1 | 0 |
1 | 1 |
1 | 2 |
1 | 3 |
2 | 0 |
2 | 1 |
2 | 2 |
Aztán lefut ez a vacak mondjuk a 2-es kategóriára:
cim_id | cat_id |
1 | 0 |
1 | 1 |
1 | 0 |
1 | 3 |
2 | 0 |
2 | 1 |
2 | 0 |
Teccikérteni? Persze a megjelenítőnek mindegy, annak egyszeri szereplés elég, de nem akarok redundáns sorokat.
Találtam a neten egy megoldást (http://www.justin-cook.com/wp/2006/12/12/remove-duplicate-entries-rows-a-mysql-database-table/), ami alapján ezt hoztam ki:function throwduplby($table, $field)
{
@mysql_unbuffered_query('CREATE TABLE tmp AS SELECT DISTINCT * FROM '.$table);
@mysql_unbuffered_query('DROP TABLE '.$table);
@mysql_unbuffered_query('RENAME TABLE tmp TO '.$table);
} Nekem ez azonban eléggé gánynak tűnik. Valami alternatív megoldás a duplikációk törlésére esetleg? Vagy esetleg teljesen másképp kéne megközelíteni már a törlést is? |