cybton.com
Über uns | Jobs | Werbung | Sitemap | AGB | Impressum | Hilfe ?
 Kostenlos anmelden)
Forum
Aktuellste Beiträge
Forenregeln

Community
BB-Codes
Tags
Chat
Suche (Web)
Wer ist online?
Top-User

Basar


Statistik
Mitglieder gesamt: 68122
Mitglieder online: 0
Gäste online: 2
mehr...

Anzeige
Forum » Forum: Website & Webprogrammierung » Thread: [gelöst] Alternative für einen INSERT + Subquery auf gleicher Tabelle

Thread: [gelöst] Alternative für einen INSERT + Subquery auf gleicher Tabelle


04.06.2008 13:56 Uhr

 

Status: offline
Tag zusammen  :glad: 

Ich habe eine Tabelle mit Teams, die in einer frei wählbaren Reihenfolge ausgegeben werden sollen. Dazu habe ich die Spalte "order" in der Tabelle erstellt anhand derer die Einträge aufsteigend sortiert werden. Dies funktioniert auch wunderbar.

Mein Problem ist das hinzufügen eines neuen Teams !
Diesem Team muss natürlich auch ein "order"-Wert zugewiesen werden was ich automatisch mit einem Subquery in dem INSERT lösen wollte:
mysql:
1
2
3
4
INSERT INTO `teams`
            (`name`,`order`)
     VALUES ('neuer Teamname',
             (SELECT MAX(`order`)+1 FROM `teams`))
Allerdings endet das mit
"ERROR 1093 (HY000): You can't specify target table 'teams' for update in FROM clause"

Eigentlich kann man das ja auch mit zwei Querys lösen (den ersten zum ermitteln der MAX(order) und den zweiten zum hinzufügen), aber ich hoffte das mit einem machen zu können.
Wie kann ich den Query also so umgestalten das er doch noch tut was ich gern hätte ?
Oder gibt es da vielleicht noch eine andere Lösung die das hinzufügen eines Teams in die Tabelle und deren "Reihenfolge" ermöglicht ?

Ach ja, die Tabelle hat auch eine "id"-Spalte die das Flag "auto_increment" besitzt. Dies lässt sich also nicht auf die "order"-Spalte legen, zumal das Löcher in die "order"-Spalte bringen würde sobald ein oder mehrere Einträge gelöscht werden und neue hinzukommen.

~Dragonl
1 mal bearbeitet
___________________________
Wichtig: mit cybton gegen AIDS kämpfen
"Ich will das Rad kein zweites mal erfinden,
ich will nur verstehen wie es funktioniert !"
04.06.2008 14:07 Uhr

 

bmk
Moderator
Status: offline
mysql:
1
2
3
4
5
6
7
8
INSERT INTO `teams`
   (`name`,`order`)
VALUES ('neuer Teamname',
   (SELECT new_order FROM
      (
         SELECT MAX(`order`)+1 AS new_order FROM `teams`)
      ) AS dummytable
   )
Du musst der Zwischentabelle einen Namen geben, dann sollte das funktionieren. Die Tabelle "dummytable" ist dann beim zeitpunkt des UPDATEs schon fix ausgewertet.
1 mal bearbeitet
___________________________
Let's code responsibly...
Webcrawler -- Portal für Dirigenten -- Musikverein Königstetten
04.06.2008 14:33 Uhr

 

Status: offline
Hey super, das ging fix  :lol: 

Fast richtig  :tongue: 
Mit deinem Vorschlag bekam ich: "ERROR 1248 (42000): Every derived table must have its own alias"

Daraufhin habe ich das "AS dummytable" eine Klammerung höher gesetzt und dann funktioniert es.
Warst wohl einmal in der Klammer verrutscht.
mysql:
1
2
3
4
5
6
7
8
9
10
INSERT INTO `teams`
            (`name`,`order`)
     VALUES ('neuer Teamname',
             (
                  SELECT `new_order` FROM
                  (
                        SELECT MAX(`order`)+1 AS `new_order`FROM `teams`
                   ) AS `dummytable`
              ) 
             );
Nochmal vielen Dank, funktioniert super !

Gruß Tobias
___________________________
Wichtig: mit cybton gegen AIDS kämpfen
"Ich will das Rad kein zweites mal erfinden,
ich will nur verstehen wie es funktioniert !"
04.06.2008 14:55 Uhr

 

bmk
Moderator
Status: offline
Ja, stimmt da bin ich verrutscht. Die beim innersten SELECT ganz rechts hatte ich übersehen.
;-)
___________________________
Let's code responsibly...
Webcrawler -- Portal für Dirigenten -- Musikverein Königstetten
Ähnliche Threads Forum Ähnlichkeitsgrad
 Query wertigkeit Website & Webprogrammierung 2
 [gelöst] Fragen bezüglich MySQL Website & Webprogrammierung 1
 FTP wo und wie? Fragen zu cybton.com 1
 Mysql zwei Tabellen verbinden Website & Webprogrammierung 1
 [Problem] MySQL mehrere Einträge gleichzeitig verändern geht nicht Website & Webprogrammierung 1
 MySQL nur für Localhost Software & Betriebssysteme 1
 Atomatic Mail Respond [For example: Brithday reminder] Website & Webprogrammierung 1
nach obennach oben

Copyright © 2008 cybton-network

Google
Partner: #Musik - Dein Internetradio - nexem. - .wir machen news - Your-Book.net - Dein kostenloses Gästebuch
ANEXIA - PHP Entwicklung - Dockers - s.Oliver Schuhe - Think Schuhe - der eigene Weg - Dorfen - Paul Green Schuhe - Bequeme Geox - Web-Entwicklung