AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[MySQL] Problem mit COUNT

Ein Thema von 3_of_8 · begonnen am 1. Mär 2006 · letzter Beitrag vom 2. Mär 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#1

[MySQL] Problem mit COUNT

  Alt 1. Mär 2006, 19:16
Datenbank: MySQL • Zugriff über: PHP
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.)
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: [MySQL] Problem mit COUNT

  Alt 1. Mär 2006, 19:20
z.B. so:
SELECT user_id, count(ship_id) FROM ships GROUP BY user_id 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.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: [MySQL] Problem mit COUNT

  Alt 1. Mär 2006, 19:28
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.*)
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#4

Re: [MySQL] Problem mit COUNT

  Alt 1. Mär 2006, 19:35
Erstmal alles auf 0 setzen:
Code:
// 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']);
}
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*

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: [MySQL] Problem mit COUNT

  Alt 1. Mär 2006, 19:41
Die Idee hatte ich auch schon, aber ich dachte, man könnte das auch "in einem Rutsch" machen, so ähnlich wie ich oben.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: [MySQL] Problem mit COUNT

  Alt 1. Mär 2006, 19:49
Um Redundanzen zu vermeiden sollte auf das Feld Fleet in der Benutzerdatenbank verzichtet werden und die Anzahl bei Bedarf mit mit SELECT ownerid, count(ship_id) FROM ships GROUP BY ownerid ermittelt werden.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#7

Re: [MySQL] Problem mit COUNT

  Alt 1. Mär 2006, 19:58
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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: [MySQL] Problem mit COUNT

  Alt 1. Mär 2006, 20:06
Wenn die Tabellen richtig indiziert sind, dürfte das eigentlich kein Problem sein.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: [MySQL] Problem mit COUNT

  Alt 1. Mär 2006, 20:19
Moment... Redundanz... Was heißt das? Doppeldeutigkeit? Naja egal... Ich lass einfach mal meinen Code, der eh schon so ähnlich ist wie der von alcaeus. Danke @all.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: [MySQL] Problem mit COUNT

  Alt 1. Mär 2006, 20:23
Zitat:
Moment... Redundanz... Was heißt das? Doppeldeutigkeit?
Wenn ein sachverhalt mehrmals gespeichert ist. ( In deinem Fall explizit im Feld fleet und implizit durch die Anzahl der datensätze mit dem selben Fremschlussel ownerid)
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz