![]() |
Datenbank: MySQL • Zugriff über: PHP
[MySQL] Problem mit COUNT
Morgen.
Also, ich hab folgendes Problem: Ich habe zwei Tabellen, users und ships. Ein Benutzer kann mehrere Schiffe haben. User und Ships haben jeweils eine id (mit autoincrement, ist primary). Ich will jetzt mit UPDATE oder so ähnlich bei jedem User den Wert des Feldes fleet eines Users auf die Anzahl der Schiffe setzen, die dem User gehören (also bei denen die ownerid gleich der userid des Users ist.) |
Re: [MySQL] Problem mit COUNT
z.B. so:
SQL-Code:
Sobald du alle Daten rausgeholt hast, laeufst du in einer Schleife ueber alle Zeilen hinweg, und updatest alle Benutzerschiffe. Zuerst solltest du den Count auf 0 setzen, und anschliessend auf die jeweilige Anzahl.
SELECT user_id, count(ship_id) FROM ships GROUP BY user_id
Greetz alcaeus |
Re: [MySQL] Problem mit COUNT
Was verstehst du unter Benutzerschiffe? Ich glaube ich geb mal kurz die Struktur, damit wir nicht aneinander vorbeireden.
Tabelle users userid INT(11) UNSIGNED fleet INT UNSIGNED Tabelle ships shipid INT(11) UNSIGNED ownerid INT(11) UNSIGNED Wobei userid und shipid auch noch autoincrement und primary sind. Ich will jetzt fleet bei jedem user auf die Anzahl der Schiffe setzen, die als ownerid die userid des jeweiligen Users haben. Meine momentane Abfrage sieht so aus, wird aber wohl nicht funzen: UPDATE users u LEFT JOIN ships s ON (s.ownerid=u.userid) SET u.fleet=COUNT(s.*) |
Re: [MySQL] Problem mit COUNT
Erstmal alles auf 0 setzen:
Code:
Das ist ungetesteter Code, an dem du noch Hand anlegen musst; ich verwende immer nur ein DBAL fuer die Datenbank, und nehme selten die mysql_*-Funktionen *g*
// Erstmal alles auf 0
mysql_query('UPDATE users SET fleet = 0'); // Alle Schiffe zaehlen, gruppiert nach ownerid $result = mysql_query('SELECT ownerid, count(shipid) as fleet FROM ships GROUP BY ownerid'); // In einer Schleife alle Ergebnisse durchlaufen und updaten while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { mysql_query('UPDATE users SET fleet = '. $row['fleet'] .' WHERE userid = '. $row['ownerid']); } Greetz alcaeus |
Re: [MySQL] Problem mit COUNT
Die Idee hatte ich auch schon, aber ich dachte, man könnte das auch "in einem Rutsch" machen, so ähnlich wie ich oben.
|
Re: [MySQL] Problem mit COUNT
Um Redundanzen zu vermeiden sollte auf das Feld Fleet in der Benutzerdatenbank verzichtet werden und die Anzahl bei Bedarf mit
SQL-Code:
ermittelt werden.
mit SELECT ownerid, count(ship_id) FROM ships GROUP BY ownerid
|
Re: [MySQL] Problem mit COUNT
Naja, mach das mal wenn du 10000 User mit je 500 Schiffen hast, nur um ein Beispiel zu nennen: das Query laeuft ewig. Da ist es evtl. schon geschickter, die Anzahl zu "cachen" ;)
Greetz alcaeus |
Re: [MySQL] Problem mit COUNT
Wenn die Tabellen richtig indiziert sind, dürfte das eigentlich kein Problem sein.
|
Re: [MySQL] Problem mit COUNT
Moment... Redundanz... Was heißt das? Doppeldeutigkeit? :gruebel: Naja egal... Ich lass einfach mal meinen Code, der eh schon so ähnlich ist wie der von alcaeus. Danke @all.
|
Re: [MySQL] Problem mit COUNT
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz