SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Webseiten professionell erstellen

Webseiten professionell erstellen zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 22.01.2010, 16:40:27
Michi Müller Michi Müller ist offline
Anfänger
 
Registriert seit: Jan 2010
Alter: 50
Beiträge: 2
Abfrage mit COUNT über mehrere Tabellen

Hallo,

ich betreibe eine Fotoseite und möchte die User ein wenig statistisch auswerten.

Dazu möchte in Tabelle '4images_comments' die Anzahl der abgegeben Kommentare und in '4images_images' die Anzahl der eingestellten Bilder zählen und ausgeben.

Ich benutze dazu folgenden Code:
Code:
SELECT 4images_users.user_name,
COUNT(4images_comments.user_id) AS noComments,
COUNT(4images_images.user_id) AS noImages
FROM 4images_users 
NATURAL LEFT OUTER JOIN 4images_comments
NATURAL LEFT OUTER JOIN 4images_images
GROUP BY 4images_users.user_name
ORDER BY 4images_users.user_name
Die Ausgabe sieht wie folgt aus:

user_name....noComments..noImages
Andreas......115.........20
AndreasK.....0...........0
Angelsachse..709.........96
Anita........335.........54
apri.........240.........27
Bernd........24..........6
Caspar.......38..........2
chris........0...........0
Eisvogel.....279.........31
Flow.........4...........0
Frank........548.........105
...


Das sieht auf den ersten Blick auch richtig aus. Die Anzahl der Kommentare stimmt. Die Anzahl der Images nicht. Ich habe mit JOIN herumgespielt, bin aber zu keinem Ergebnis gekommen.

Ich würde mich über Hilfe freuen, da bei meinem Horizont in Sachen SQL ziemlich schnell die Dämmerung einsetzt.

Gruß Michi Müller

Geändert von Michi Müller (22.01.2010 um 17:03:21 Uhr)
Mit Zitat antworten
  #2  
Alt 22.01.2010, 20:24:52
Crisps Crisps ist offline
Junior Member
 
Registriert seit: Oct 2008
Alter: 47
Beiträge: 274
AW: Abfrage mit COUNT über mehrere Tabellen

Du musst die beiden Tabellen Comments und Images getrennt voneinander zählen. Versuchs mal mit einer dieser zwei Abfragen:

Code:
SELECT u.user_name
     , (SELECT COUNT(*)
          FROM 4images_comments
         WHERE user_id = u.user_id) AS noComments
     , (SELECT COUNT(*)
          FROM 4images_images
         WHERE user_id = u.user_id) AS noImages
  FROM 4images_users AS u;
Code:
SELECT u.user_name
     , COALESCE(c.comment_count, 0) AS noComments
     , COALESCE(i.image_count, 0) AS noImages
  FROM 4images_users AS u
LEFT OUTER
  JOIN ( SELECT user_id
              , COUNT(*) AS comment_count
           FROM 4images_comments
         GROUP
             BY user_id ) AS c
    ON c.user_id = u.user_id
LEFT OUTER
  JOIN ( SELECT user_id
              , COUNT(*) AS image_count
           FROM 4images_images
         GROUP
             BY user_id ) AS i
    ON i.user_id = u.user_id;
Sorry dass ich die beiden Abfragen nicht näher erläutere, aber ich schreibe Queries lieber als das ich über sie rede. ;)

Wenn du noch etwas genauer wissen willst, dann frag einfach noch einmal nach.
Mit Zitat antworten
  #3  
Alt 22.01.2010, 23:16:24
Michi Müller Michi Müller ist offline
Anfänger
 
Registriert seit: Jan 2010
Alter: 50
Beiträge: 2
AW: Abfrage mit COUNT über mehrere Tabellen

Hallo Crisps!

Deine erste Query ist PERFEKT! Wenn man sich das genau ansieht, scheint auch logisch zu sein.

Nur schade, dass ich nicht verstehe, warum meine Abfrage nicht so funktioniert, wie ich es mir vorstelle. :-(

Ich danke Dir recht herzlich.

Gruß Michi Müller
Mit Zitat antworten
  #4  
Alt 25.01.2010, 10:22:29
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
AW: Abfrage mit COUNT über mehrere Tabellen

hi

@Crisps
Zitat:
Zitat von Crisps Beitrag anzeigen
Sorry dass ich die beiden Abfragen nicht näher erläutere, aber ich schreibe Queries lieber als das ich über sie rede. ;)
Tun wir das nich alle ;) aber auch wenn die meisten hier nur Copy&Paste einer Lösung wollen
sollte man für googlesuchende schon ne kleine Erklärung hinterlassen.

Zitat:
Zitat von Crisps Beitrag anzeigen
Code:
SELECT u.user_name
     , (SELECT COUNT(*)
          FROM 4images_comments
         WHERE user_id = u.user_id) AS noComments
     , (SELECT COUNT(*)
          FROM 4images_images
         WHERE user_id = u.user_id) AS noImages
  FROM 4images_users AS u;
Subselects sind meiner Meinung nach die einzige Lösung für Count's über mehrer Tabellen.
Wobei hier ein subselect gespart werden könnte z.B.

Code:
SELECT u.user_name
     , COUNT(*) AS noComments
     , (SELECT COUNT(*)
          FROM 4images_images
         WHERE user_id = u.user_id) AS noImages
  FROM 4images_users AS u 
  LEFT JOIN 4images_comments AS co
         on co.user_id=u.user_id
  GROUP BY u.user_id;
@TE
Deine count abfrage hat seltsame werte denn meines wissen wird pro username * count * count von Mysql interpretiert was die Bilderanzahl mal Comments bedeuten würde.

mfg

Ckaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Mit Zitat antworten
  #5  
Alt 26.01.2010, 09:33:48
Crisps Crisps ist offline
Junior Member
 
Registriert seit: Oct 2008
Alter: 47
Beiträge: 274
AW: Abfrage mit COUNT über mehrere Tabellen

Zitat:
Zitat von Ckaos Beitrag anzeigen
hi

@Crisps

Tun wir das nich alle ;) aber auch wenn die meisten hier nur Copy&Paste einer Lösung wollen
sollte man für googlesuchende schon ne kleine Erklärung hinterlassen.
Wie gesagt, mir fällt es schwer eine Query irgendwie groß zu erklären. Deshalb auch das Angebot, dass man noch einmal nachfragen soll wenn man etwas nicht versteht.

Ich bin halt kein Informatiker und das typische Informatikerdeutsch schreckt mich auch ab.

Zitat:
Zitat von Ckaos Beitrag anzeigen
Wobei hier ein subselect gespart werden könnte z.B.

Code:
SELECT u.user_name
     , COUNT(*) AS noComments
     , (SELECT COUNT(*)
          FROM 4images_images
         WHERE user_id = u.user_id) AS noImages
  FROM 4images_users AS u 
  LEFT JOIN 4images_comments AS co
         on co.user_id=u.user_id
  GROUP BY u.user_id;
Ein Subselect weniger aber etwas 'langsamer' als die erste und etwa gleich schnell wie die zweite von mir gepostete Abfrage. Warum? Ich weiß es auch nicht. *kopfkratz*
Mit Zitat antworten
  #6  
Alt 26.01.2010, 10:20:31
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
AW: Abfrage mit COUNT über mehrere Tabellen

hi

Zitat:
Zitat von Crisps Beitrag anzeigen
Wie gesagt, mir fällt es schwer eine Query irgendwie groß zu erklären. Deshalb auch das Angebot, dass man noch einmal nachfragen soll wenn man etwas nicht versteht.
Das kann aber der der in 6monaten diesen Beitrag bei google findet vielleicht nichtmehr ;)
Verweise zu mysql.de oder tutorialseiten woher man sein wissen über das thema hat
wären nützlich dazu bedarf es keines fachchinesisch.

Zitat:
Zitat von Crisps Beitrag anzeigen
Ein Subselect weniger aber etwas 'langsamer' als die erste und etwa gleich schnell wie die zweite von mir gepostete Abfrage.
Wie würdest du das beweisen wenn ich es in frage stelle?

mfg

Ckaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Mit Zitat antworten
  #7  
Alt 26.01.2010, 13:04:55
Crisps Crisps ist offline
Junior Member
 
Registriert seit: Oct 2008
Alter: 47
Beiträge: 274
AW: Abfrage mit COUNT über mehrere Tabellen

Zitat:
Zitat von Ckaos Beitrag anzeigen
Das kann aber der der in 6monaten diesen Beitrag bei google findet vielleicht nichtmehr ;)
Verweise zu mysql.de oder tutorialseiten woher man sein wissen über das thema hat
wären nützlich dazu bedarf es keines fachchinesisch.
Wenn jemand nach 6 Monaten nicht auf den "Antworten" Button klicken kann, kann ich ihm auch nicht helfen.
Zitat:
Zitat von Ckaos Beitrag anzeigen
Wie würdest du das beweisen wenn ich es in frage stelle?
Stell es doch in Frage, oder mach ein Benchmark - ist doch mir egal.
Mit Zitat antworten
  #8  
Alt 26.01.2010, 14:06:57
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
AW: Abfrage mit COUNT über mehrere Tabellen

Hi

@Crisp
Ich denk du weisst selber das es im Internet mehr als genug Forenbeiträge gibt
die einen nicht weiterbringen. Selbst erlebt habe ich das nach einem bestimmten Thema
gesucht ich mehr als 10 Foren inkl. Beiträge gefunden habe wo die selbe Frage gestellt
wurde und es aber nie eine Antwort oder eine nicht zufriedenstellende Antwort gab.
Desweiteren mögen viele Mods der Foren nicht das man alte Beiträge "wiederbelebt".
Das war mein Grundgedanke dabei.

Und zu meiner höfflichen Anfrage
Zitat:
Ein Subselect weniger aber etwas 'langsamer' als die erste und etwa gleich schnell wie die zweite von mir gepostete Abfrage.
Interessiert mich immernoch wie du auf 'langsamer' kommst, den dort schaltet mein
Wissenshunger und ich hoffe durch deine Antwort etwas dazu zu lernen oder dir dein
Ergebnis zu widerlegen.

Hoffe auf weitere nette Antworten

mfg

Ckaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Abfrage über Tabellen frank1973 MySQLi/PDO/(MySQL) 5 06.01.2010 08:03:23
Mysql Abfrage über zwei Tabellen mit SUM und Count abyss MySQLi/PDO/(MySQL) 1 12.06.2008 22:30:17
Abfrage über 3 gleiche Tabellen Michael_Roelle MySQLi/PDO/(MySQL) 4 28.02.2008 08:42:03
Abfrage über zwei Tabellen MrLongbaugh MySQLi/PDO/(MySQL) 6 30.08.2005 18:14:56
MySQL Abfrage mit COUNT MaXiM MySQLi/PDO/(MySQL) 1 03.04.2005 17:47:13


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:37:01 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt