WulfmanGER
Commander
- Registriert
- Juli 2005
- Beiträge
- 2.312
Hallo,
ich kann für die Tabelle kein AI nutzen - daher muss ich händisch hoch zählen. Mein Query dafür schaut so aus:
Auf fid+pid+category ist zusammen als unique definiert.
fid, pid und category kommen separat doppelt vor - das liegt in der Natur der Daten.
ordering soll manuell hochgezählt werden (ordering ist für fid+category einmalig)
Daher nutze ich das INSERT oben mit einem SELECT welches mir den bisherigen MAX(ordering)-Wert anzeigt. +1 = Fertig
Das klappt ... wenn es aber bisher die Category für diese fid nicht gab, kommt als WARNUNG
Der Eintrag erfolgt trotzdem (mit 0 als Wert). Kann das somit natürlich einfach ignorieren.
Mit IF sieht das ganze etwas monströs aus
Klappt (bisher) ...
Aber ist das sauberer? Das Feld ordering ist übrigens int und enthält seitens der fütternden Scripte IMMER ein Ordering (daher kein defaultwert gesetzt - mit 1 hab ich es aber schon probiert - klappt natürlich nicht)
Danke schon mal
ich kann für die Tabelle kein AI nutzen - daher muss ich händisch hoch zählen. Mein Query dafür schaut so aus:
Code:
INSERT IGNORE INTO rollen_test (ordering, fid, pid, category)
VALUES((SELECT MAX(ordering) FROM rollen_test rt WHERE fid=12349 AND category='abc')+1, 12349, 999, 'abc');
Auf fid+pid+category ist zusammen als unique definiert.
fid, pid und category kommen separat doppelt vor - das liegt in der Natur der Daten.
ordering soll manuell hochgezählt werden (ordering ist für fid+category einmalig)
Daher nutze ich das INSERT oben mit einem SELECT welches mir den bisherigen MAX(ordering)-Wert anzeigt. +1 = Fertig
Das klappt ... wenn es aber bisher die Category für diese fid nicht gab, kommt als WARNUNG
Warning: #1048 Feld 'ordering' darf nicht NULL sein
Der Eintrag erfolgt trotzdem (mit 0 als Wert). Kann das somit natürlich einfach ignorieren.
Mit IF sieht das ganze etwas monströs aus
Code:
INSERT IGNORE INTO rollen_test (ordering, fid, pid, category)
VALUES(
IF((SELECT MAX(ordering) FROM rollen_test rt WHERE fid=12349 AND category='uuu')>=1,
(SELECT MAX(ordering) FROM rollen_test rt WHERE fid=12349 AND category='uuu')+1,1),
12349, 9999, 'uuu')
Aber ist das sauberer? Das Feld ordering ist übrigens int und enthält seitens der fütternden Scripte IMMER ein Ordering (daher kein defaultwert gesetzt - mit 1 hab ich es aber schon probiert - klappt natürlich nicht)
Danke schon mal