DJoSSi: MySQL - Update eine Spalte

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

  1. 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

  2. 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