php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 19.09.2004, 12:52  
Gast
 
Beiträge: n/a
Standard Abfrage zweier Tabellen mit COUNT() funktion

Hallo,

ich habe zwei Tabellen. In der einen befinden sich Informationen über Bilder in der anderen Kommentare zu den Bilden. Jedes Bild kann mehrer Kommentare haben. Bei jedem Kommentar ist die ID (bild_id) des zugehörigen Datensatzes des Bildes eingetragen. Ich möchte in einem Query einmal die Informationen der Bilder bekommen und gleichzeitig die Anzahl zugehöriger Kommentare.

Bilder
+----+--------+--------+
| ID | Info1 | Info2 |
+----+--------+--------+
| 1 | A | 3.45 |
| 2 | B | 3.99 |
| 3 | A | 10.99 |
| 4 | B | 1.45 |
| 5 | C | 1.69 |
| 6 | D | 1.25 |
| 7 | D | 19.95 |
+----+---------+-------+

Kommentare
+-----+--------+------------------+
| ID | bild_id | Kommentar |
+-----+--------+------------------+
| 1 | 2 | LOL! |
| 2 | 7 | Hehe. |
| 3 | 7 | KA |
| 4 | 7 | das ja lol |
| 5 | 1 | mhh |
| 6 | 7 | toll sache |
| 7 | 2 | hey weiter so! |
+-----+--------+------------------+

Folgender Query funktioniert nicht:
SELECT Bilder.*, COUNT(Kommentare.id) AS num FROM Bilder LEFT JOIN Kommentare ON Kommentare.bild_id=Bilder.id

Danke im Voraus,
mfG Ingmar
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 19.09.2004, 14:44  
Gast
 
Beiträge: n/a
Standard

Also dein Ansatz war schon mal nicht verkehrt. Wenn du jetzt noch das * raus nimmst und alle Spalten beim Namen nennst (Bilder.Spalte1, Bilder.Spalte2,...), bist du schon mal einen Schritt näher am Ziel.

Wenn du ein COUNT() verwendest, musst du auch ein GROUP BY verwenden. Tust du das aber in diesem Fall, kannst du die Kommentare nicht mehr einzeln ausgeben. Da sie ja dann gruppiert worden sind. Du brauchst vermutlich eine 2. Abfrage, die dir ausgibt, wieviele Kommentare zu jedem Bild vorhanden sind.
Oder du verwendest bei der Schleife zum ausgeben der Kommentare einen Zähler, der dir die Kommentare zählt.

PHP-Code:
<?php
    $zaehler 
1;
    while (
Bedingung) {
        
$zaehler++;
    }
    echo 
"Es wurden ".$zaehler." Kommentare abgegeben.";
?>
  Mit Zitat antworten
Alt 19.09.2004, 14:46  
Gast
 
Beiträge: n/a
Standard

liegt am bilder.*
wenn du eine aggregatsfunktion hast, musst du den rest group by machen..

und verwende nicht *

Code:
SELECT Bilder.Id, Bilder.Info1, Bilder.Info2, COUNT(Kommentare.id) AS num FROM Bilder LEFT JOIN Kommentare ON Kommentare.bild_id=Bilder.id group by (Bilder.Id, Bilder.Info1, Bilder.Info2)
sollte funktionieren..
  Mit Zitat antworten
Alt 19.09.2004, 21:51  
Gast
 
Beiträge: n/a
Standard

Soooooooo erstmal danke danke soweit,

aber wie ihr euch unschwer vorstellen könnt war das mit id und Info1, Info2 natürlich etwas vereinfacht.

Zitat:
Tust du das aber in diesem Fall, kannst du die Kommentare nicht mehr einzeln ausgeben.
Das war auch nicht meine Absicht. Ich brauche lediglich die Infos über das Bild sowie die Anzahl der Kommentare.

Folgender Query ist nun wirklich aus meinem Code und sollte funktionieren, was er aber nicht tut.

Code:
Error in mysql-query: SELECT i.ID, i.thumb, i.file, i.rate, i.dimensions, i.name, i.timestamp, COUNT(c.id) AS num FROM gallery_images i LEFT JOIN gallery_comments c ON c.image_id=i.id WHERE i.album_id="41" GROUP BY (i.ID, i.thumb, i.file, i.rate, i.dimensions, i.name, i.timestamp) LIMIT 0,12
Ausserdem muss das ganze noch ORDER BY i.timestamp sein. Wie bekomme ich das denn noch unter?

mfG Ingmar
  Mit Zitat antworten
Alt 19.09.2004, 21:54  
Gast
 
Beiträge: n/a
Standard

das mit dem order by ist kein problem..
einfach order by i.timestamp anfügen..

auf die schnelle sehe ich sonst grad kein fehler..
  Mit Zitat antworten
Alt 19.09.2004, 22:44  
Gast
 
Beiträge: n/a
Standard

Wäre noch schön gewesen, wenn du uns die Fehlermeldung auch noch gepostet hättest.

Das das Order BY angeht, schaust du am besten hier mal rein.

http://dev.mysql.com/doc/mysql/de/SELECT.html

[edit]
Ich bin mir nicht sicher, aber ich würde erst mal die " " bei der 41 raus nehmen.

Und nimm mal die Klammern bei dem GROUP BY raus. Die gehören da meines Erachtens nicht hin.
[/edit]
  Mit Zitat antworten
Alt 20.09.2004, 06:17  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von PrinzEisenherz
[edit]
Ich bin mir nicht sicher, aber ich würde erst mal die " " bei der 41 raus nehmen.

Und nimm mal die Klammern bei dem GROUP BY raus. Die gehören da meines Erachtens nicht hin.
[/edit]
die "" sollten kein problem sein.. zumindest nicht im syntaktischen aufbau des query.. es wird einfach id mit 41 als string verglichen, was es wahrscheinlich nicht findet und dann hast du ein abfrage ohne resultat..

die klammern bei group by sollten nicht stören.. eher sogar gut sein..
  Mit Zitat antworten
Alt 20.09.2004, 06:25  
Gast
 
Beiträge: n/a
Standard

wenn ich das query ausführen lasse bekomme ich...

Zitat:
Incorrect syntax near the keyword 'file'
keine ahunug woran das liegen könnte.. file sollte ja kein reserved word sein..

btw.. wenn ich file (das gleich nach select) in bla ändere, bekomme ich..
Zitat:
Line 1: Incorrect syntax near ','
komisch...
  Mit Zitat antworten
Alt 20.09.2004, 06:27  
Gast
 
Beiträge: n/a
Standard

bin mir nicht sicher.. aber hatte grad ne idee..
ich glaub du kannst kein where verwenden, wenn du ne aggregatsfunktion hast..

schreib anstelle vom where mal..
Code:
having i.album_id=41
  Mit Zitat antworten
Alt 20.09.2004, 06:31  
Gast
 
Beiträge: n/a
Standard

hab das problem nun gefunden..
lag an den klammern und dem file..

Code:
SELECT i.ID, i.thumb, i.fils, i.rate, i.dimensions, i.name, i.timestamp, 
COUNT(c.id) AS num FROM gallery_images i 
LEFT JOIN gallery_comments c 
ON c.image_id=i.id 
GROUP BY i.ID, i.thumb, i.fils, i.rate, i.dimensions, i.name, i.timestamp
HAVING i.album_id=41
hat bei mir gefunzt..
ich glaub file ist doch n keyword..
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
abfrage auf gleiche Spalten aus zwei Tabellen maeck Datenbanken 13 08.07.2008 10:09
Mysql Abfrage über zwei Tabellen mit SUM und Count abyss Datenbanken 2 12.06.2008 22:19
Abfrage mehrere Tabellen SteiniKeule Datenbanken 14 18.04.2008 19:57
Abfrage in Funktion auslagern - lohnt sich das? tayke Datenbanken 4 15.11.2007 23:36
MySQL Abfrage über 2 Tabellen Datenbanken 4 21.03.2006 11:44
variable aus if Abfrage mit in eine Funktion nehmen djrace PHP Tipps 2005-2 6 20.10.2005 15:57
(schnellere) Funktion zum Zusammenfassen von CSS PHP-Fortgeschrittene 21 08.08.2005 16:47
Abfrage über 2 tabellen mit NOT IN Datenbanken 3 25.10.2004 16:49
Möglich, Daten zweier Tabellen zusammenrechnen? duerov PHP Tipps 2004 1 08.10.2004 08:57
Abfrage über 3 Tabellen Datenbanken 3 20.09.2004 08:08
Abfrage zweier Tabellen funzt net richtig Datenbanken 1 17.09.2004 12:53
[Erledigt] Abfrage von drei Tabellen und Rückgabe einer ID Datenbanken 6 27.08.2004 09:36
2 Tabellen 1 Abfrage nilsfeld Datenbanken 6 11.08.2004 11:18
Abfrage über 3 Tabellen PHP Tipps 2004 3 31.07.2004 22:34
SQL Abfrage aus mehreren Tabellen PHP Tipps 2004 7 26.07.2004 16:56

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
count funktion bei tabellen

Alle Zeitangaben in WEZ +1. Es ist jetzt 14:57 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.