tabela
ID | parent | display_order
i rekordy
1 0 1
2 1 2
3 1 3
4 3 1
4 3 2
4 3 2
4 3 3
4 3 3
Do wyłapania tych powielonych display_order:
GROUP BY parent, display_order HAVING COUNT(display_order) > 1
Ma ktoś pomysł jak ułożyć takie zapytanie które prze numeruje poprawnie rekordy z danym parent w którym wystąpił dubel pola display_order czyli np dwa razy jest 3 ?
Kombinuję z:
UPDATE TABLE SET display_order = (display_order + 1) WHERE id IN (SELECT id FROM TABLE GROUP BY parent, display_order HAVING COUNT(display_order) > 1)
Choć wiem że to i tak nie zadziała tak jak chcę. Powyższe zapytanie wypluwa:
#1093 - You can't specify target table 'table' for update in FROM clause
Pewno się wykrzacza wym że Select wypluwa więcej niż 1 rekord.
Generalnie parent w którym wystąpiła duplikacja można wyciągnąć tym zapytaniem:
SELECT t.parent FROM TABLE t WHERE m.id IN (SELECT id FROM TABLE GROUP BY parent, display_order HAVING COUNT(display_order) > 1) GROUP BY t.parent
Teraz kwestia ponumerowanie tego kolejno od 1 wzwyż od nowa z uwzględnienieniem aktualnego dispay_order. Da radę zrobić to w samym SQL'u ? Czy trzeba do tego użyć PHP ? Bo jak nie da rady w SQL'u to sobie poradzę
