WulfmanGER
Commander
- Registriert
- Juli 2005
- Beiträge
- 2.324
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![Zwinkern ;) ;)](/forum/styles/smilies/wink.gif)
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
![Zwinkern ;) ;)](/forum/styles/smilies/wink.gif)
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