MySQL - Update eine Spalte
DJoSSi
- datenbank
also MySQL 4.1.15 im Einsatz
hab zwei Tabellen..
a) Owner (ID,OwnerKey,Count)
b) Objects (ObjKey,OwnerKey,....)
ganz simpel möchte ich folgendes erreichen:
da in Objects ein Owner mehrere Objekte besitzen kann
möchte ich sie zählen und das ergebnis in die erste tabelle übertragen
sollte kein Objekt zum Besitzer gefunden werden also auch die 0
a)
erster Gedanke war eine PHP-Schleife die
jede Reihe in Owner durchgeht (Variable=OwnerKey)
und mit
SELECT count(*) FROM Objects WHERE OwnerKey=Variable GROUP BY Variable
einzeln das Ergebnis mit einer UPDATE einzutragen
Meinung: das dauert doch viel zu lange
b)
zweiter Gedanke war die Spalte mit 0 zu füllen
und eine Ergebnistabelle der Form aus
SELECT OwnerKey,count(*) FROM Objects GROUP BY OwnerKey
in die Tabelle zu übertragen (Multiple Update)
hier muss ich aber leider passen
da z.b. offensichtlich UPDATE keine VALUES zulässt
z.B.
UPDATE Owner SET Count=0
UPDATE Owner SET Count=(SELECT count(*) FROM Objects GROUP BY OwnerKey) WHERE OwnerKey=(SELECT OwnerKey FROM Objects GROUP BY OwnerKey)
ist meiner Meinung nach das Gesuchte..
aber irgendwas sagt mir dass das eventuell zu Problemen führt
überlege noch anlegen einer temporären Tabelle
und dann UPDATE mit JOIN
nun die Frage an die Experten hier:
wie würdet es Ihr machen
und Extra. lässt sich das Problem mit der 0
gleich mit einbinden
sodass es optimalerweise nur noch eine einzige UPDATE-Anweisung ist
Danke jedenfalls für Antworten in Voraus
Wollte noch hinzufügen, dass unter den Umständen, die beste Lösung eine temporäre Tabelle zu benutzen ist,
mir es lieber ist ein VIEW zu erstellen, allerdings habe ich da keine erfahrungen wie dann VIEWs benutzt werden.
lese mich da gerade ein
yo,
benutze eine sogenannten korellierte unterabfrage.
SELECT ow.id, ow.key,
(SELECT COUNT(*)
FROM objects ob
WHERE ob.ownerkey = ow.ownerkey
) Anzahl
FROM Owner ow
;
das ganze geht auch mit einen OUTER JOIN, ich würde aber die erste abfrage bevorzugen
SELECT ow.id, ow.key, COUNT(*) Anzahl
FROM Owner ow
LEFT JOIN objects ob ON ob.ownerkey = ow.ownerkey
GROUP BY ow.id, ow.key
;
Ilja