php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 26.07.2011, 09:00  
Benutzer
 
Registriert seit: 09.05.2011
Beiträge: 50
PHP-Kenntnisse:
Anfänger
Karottenkopf51 zeigte ein beschämendes Verhalten in der Vergangenheit
Standard [Erledigt] Abfrage für durchschnittliche Bewertung und Anzahl der Kommentare

Guten Tag,

ich stehe gerade vor einem größeren Problem. Es geht um meine Galerie. Ich bin gerade dabei die dynamische Ausgabe zu schreiben und habe ein Problem mit dem Auslesen der nötigen Felder der Datenbank.

Erstmal die Tabellen für die Übersicht:
Code:
Kategorie:
caid		int(11)
caname		varchar(100)

Kategorie/Galerie Zwischentabelle:
cagaid		int(11)
caid		int(11)
gaid		int(11)

Kommentar:
comid		int(11)
usid		int(11)
gaid		int(11)
comcomment	mediumtext

Galerie:
gaid		int(11)
ganame		varchar(100)
gadescription	text
gainfo		text
gafilename	varchar(20)
gadate		date

Bewertung:
gaid		int(11)
usid		int(11)
rarating	int(11)
Mein derzeitiges Statement:
Code:
SELECT caname, ganame, gadescription, gainfo, gafilename, gadate
FROM category, gallery, category_gallery, comment, rating
WHERE category.caid = category_gallery.caid
AND gallery.gaid = category_gallery.gaid
AND caname = 'Kategoriename'
ORDER BY gadate
Ich benötige ein Statement, dass mir zusätzlich die durchschnittliche Bewertung und die Anzahl der Kommentare eines Bildes zurückgibt.

In der Bewertungstabelle steht ein Datensatz für eine Bewertung und in der Kommentartabelle steht ein Datensatz für einen Kommentar. In beiden Tabellen gibt es die gaid, damit ich die Bewertungen und Kommentare mit einem Bild verknüpfen kann.

Ein Bild kann n Bewertungen haben, aber eine Bewertung kann nur zu
einem Bild gehören
Ein Bild kann n Kommentare haben, aber ein Kommentar kann nur zu einem
Bild gehören

In der Ausgabe soll in einem Datensatz ein Bild sein mit meinen bisherigen Feldern plus die zwei neuen Felder.

Hat da jemand eine Idee? Ich habe es mit Subselects und Count versucht, allerdings erhalte ich keine brauchbare Lösung.

Ich hoffe ihr könnt mir helfen.

Gruß
Karotte
Karottenkopf51 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 26.07.2011, 09:07  
Erfahrener Benutzer
 
Benutzerbild von wolf29
 
Registriert seit: 17.03.2010
Beiträge: 1.833
PHP-Kenntnisse:
Fortgeschritten
wolf29 wird schon bald berühmt werdenwolf29 wird schon bald berühmt werden
Standard

Hi.

Für den Durchschnitt verwendest Du AVG (http://www.w3schools.com/sql/sql_func_avg.asp) und zum zählen Count (http://www.w3schools.com/sql/sql_func_count.asp) oder mit PHP mysql_num_rows (http://www.php.net/manual/de/functio...l-num-rows.php).

mfg Wolf29
__________________
while (!asleep()) sheep++;

Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
wolf29 ist offline   Mit Zitat antworten
Alt 26.07.2011, 09:12  
Benutzer
 
Registriert seit: 09.05.2011
Beiträge: 50
PHP-Kenntnisse:
Anfänger
Karottenkopf51 zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Danke für den AVG Befehl, den kannte ich noch nicht. Mit Count habe ich schon versucht zu arbeiten, allerdings wie gesagt kein passendes Ergebnis bekommen.

Mir fehlt die Struktur des Befehls. Jemand eine Idee?
Karottenkopf51 ist offline   Mit Zitat antworten
Alt 26.07.2011, 09:13  
Erfahrener Benutzer
 
Benutzerbild von wolf29
 
Registriert seit: 17.03.2010
Beiträge: 1.833
PHP-Kenntnisse:
Fortgeschritten
wolf29 wird schon bald berühmt werdenwolf29 wird schon bald berühmt werden
Standard

Idee ja, wie sieht dein Versuch aus? Was für nen Fehler gibt es den?

mfg Wolf29
__________________
while (!asleep()) sheep++;

Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
wolf29 ist offline   Mit Zitat antworten
Alt 26.07.2011, 09:17  
Benutzer
 
Registriert seit: 09.05.2011
Beiträge: 50
PHP-Kenntnisse:
Anfänger
Karottenkopf51 zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Also,

Code:
SELECT caname, ganame, gadescription, gainfo, gafilename, gadate
FROM category, gallery, category_gallery, comment, rating
WHERE category.caid = category_gallery.caid
AND gallery.gaid = category_gallery.gaid
AND caname = 'Kategoriename'
ORDER BY gadate
spuckt schonmal vernünftigerweise ein Bild pro Datensatz aus. Ich kann nach Datum und Name sortieren. Nun möchte ich noch nach der Anzahl der Kommentare und der Durchschnittsbewertung sortieren können, dafür benötige ich die besagten Felder.

Nun fehlt mir jeglicher Ansatz. Ich möchte die Abfrage um diese zwei Felder erweitern.
Karottenkopf51 ist offline   Mit Zitat antworten
Alt 26.07.2011, 10:09  
Neuer Benutzer
 
Registriert seit: 06.04.2010
Beiträge: 8
PHP-Kenntnisse:
Anfänger
vanamp befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

probiers mal damit irgendwie gefallen mir die Joins nicht denke der überischt halber solltest du lieber die paar Zeichen mehr schreiben. Alias tragen auch ein bisschen zur übersicht bei.

Code:
SELECT
	c.caname,
	g.ganame,
	g.gadescription,
	g.gainfo,
	g.gafilename,
	g.gadate,
	count(k.comid) as Anz_Kommentare,
	avg(b.rarating) as Bewertung
FROM category c
JOIN category_gallery cg on cg.ciad = c.ciad
JOIN gallery g on g.gaid = cg.gaid
JOIN Kommentar k on k.gaid = g.gaid
JOIN Bewertung b on b.gaid = g.gaid
WHERE
	c.caname = 'Kategoriename'
GROUP BY
	c.caname,
	g.ganame,
	g.gadescription,
	g.gainfo,
	g.gafilename,
	g.gadate
vanamp ist offline   Mit Zitat antworten
Alt 26.07.2011, 10:13  
Benutzer
 
Registriert seit: 09.05.2011
Beiträge: 50
PHP-Kenntnisse:
Anfänger
Karottenkopf51 zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Hm, da sagt er mir jetzt #1146 - Table 'db.kommentar' doesn't exist

Edit: Wenn ich Kommentar durch comment und Bewertung durch rating ersetze, erhalte ich #1054 - Unknown column 'cg.ciad' in 'on clause'
Karottenkopf51 ist offline   Mit Zitat antworten
Alt 26.07.2011, 10:16  
Neuer Benutzer
 
Registriert seit: 06.04.2010
Beiträge: 8
PHP-Kenntnisse:
Anfänger
vanamp befindet sich auf einem aufstrebenden Ast
Standard

naja du schreibst ganz oben, dass deine Tabelle Kommentar heißt schreib doch mal die richtigen Datenbanknamen in mein Statement also kommentar mit comment ersetzen oder wie auch immer die Tabelle bei dir heißt.

Wobei comment denk ich nicht so besonders gewählt ist in manchen Sprachen ist es ein gesperrter Begriff.
vanamp ist offline   Mit Zitat antworten
Alt 26.07.2011, 10:19  
Benutzer
 
Registriert seit: 09.05.2011
Beiträge: 50
PHP-Kenntnisse:
Anfänger
Karottenkopf51 zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Code:
SELECT
	c.caname,
	g.ganame,
	g.gadescription,
	g.gainfo,
	g.gafilename,
	g.gadate,
	count(k.comid) as Anz_Kommentare,
	avg(b.rarating) as Bewertung
FROM category c
JOIN category_gallery cg on cg.ciad = c.ciad
JOIN gallery g on g.gaid = cg.gaid
JOIN comment k on k.gaid = g.gaid
JOIN rating b on b.gaid = g.gaid
WHERE
	c.caname = 'Kategoriename'
GROUP BY
	c.caname,
	g.ganame,
	g.gadescription,
	g.gainfo,
	g.gafilename,
	g.gadate
Dann erhalte ich diesen hier: #1054 - Unknown column 'cg.ciad' in 'on clause'

Edit: Okay, dann ändere ich kurz den Tabellennamen, mal testen

Edit2:

Code:
SELECT
	c.caname,
	g.ganame,
	g.gadescription,
	g.gainfo,
	g.gafilename,
	g.gadate,
	count(k.comid) as Anz_Kommentare,
	avg(b.rarating) as Bewertung
FROM category c
JOIN category_gallery cg on cg.ciad = c.ciad
JOIN gallery g on g.gaid = cg.gaid
JOIN commentary k on k.gaid = g.gaid
JOIN rating b on b.gaid = g.gaid
WHERE
	c.caname = 'Kategoriename'
GROUP BY
	c.caname,
	g.ganame,
	g.gadescription,
	g.gainfo,
	g.gafilename,
	g.gadate
Immernoch der selbe Fehler

Edit 3:

Fehler gefunden: caid und nicht ciad:

Code:
SELECT
	c.caname,
	g.ganame,
	g.gadescription,
	g.gainfo,
	g.gafilename,
	g.gadate,
	count(k.comid) as Anz_Kommentare,
	avg(b.rarating) as Bewertung
FROM category c
JOIN category_gallery cg on cg.caid = c.caid
JOIN gallery g on g.gaid = cg.gaid
JOIN commentary k on k.gaid = g.gaid
JOIN rating b on b.gaid = g.gaid
WHERE
	c.caname = 'Kategoriename'
GROUP BY
	c.caname,
	g.ganame,
	g.gadescription,
	g.gainfo,
	g.gafilename,
	g.gadate
Allerdings erhalte ich ein Ergebnis von 0 Datensätzen.

Geändert von Karottenkopf51 (26.07.2011 um 10:24 Uhr).
Karottenkopf51 ist offline   Mit Zitat antworten
Alt 26.07.2011, 10:25  
Erfahrener Benutzer
 
Benutzerbild von wolf29
 
Registriert seit: 17.03.2010
Beiträge: 1.833
PHP-Kenntnisse:
Fortgeschritten
wolf29 wird schon bald berühmt werdenwolf29 wird schon bald berühmt werden
Standard

Der Fehler ist doch klar: Spalte existiert nicht. Vermutlich meinst du auch statt "ciad" -> "caid".

mfg Wolf29
__________________
while (!asleep()) sheep++;

Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
wolf29 ist offline   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
Anzahl der Datensätze in einem Intervall ausgeben julien Datenbanken 2 12.04.2011 18:59
[Erledigt] Blätterfunktion. Anzahl der Datensätze.. inox PHP Einsteiger 10 24.02.2011 13:27
result Variablen von SQL verbinden vci PHP Tipps 2010 15 05.02.2010 19:09
[Erledigt] SQL Abfrage aus while-Schleife entfernen MasterChief Datenbanken 2 11.12.2009 14:54
SQL - Abfrage: letzte Kommentare grunz Datenbanken 5 20.10.2009 17:28
Scriptsuche [Erledigt] SQL- Abfrage über 2 tabellen ejim Scriptbörse 1 17.07.2009 21:10
erweiterte abfrage - where DarkManX Datenbanken 2 02.02.2007 17:14
[Erledigt] Anzahl der Datensätze bei abfrage Datenbanken 2 13.09.2005 16:16
Abfrage der Anzahl bestimmter Werte in einer Spalte Datenbanken 1 13.03.2005 12:30
[Erledigt] MYSQL Abfrage -> Ergebnisse auf anzahl per seite begrenze PHP Tipps 2004-2 2 21.11.2004 21:28
[Erledigt] Anzahl der Datensätze nach der Abfrage bestimmen Datenbanken 7 10.11.2004 15:27
Abfrage zweier Tabellen mit COUNT() funktion Datenbanken 23 20.09.2004 22:13
Abfrage funktioniert zwar, aber nicht korrekt Datenbanken 2 16.08.2004 09:10
Abfrage aus DB noch mal ausgeben und Abfrage aus mehrern Tab PHP Tipps 2004 4 12.07.2004 15:00
[Erledigt] Mehrere COUNT(*) in einer Abfrage mit LEFT JOIN Datenbanken 8 18.06.2004 13:43

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
durchschnittliche bewertung, rating abfrage, durchschnitt php, bewertungsskala gerade anzahl, caid tabelle, bewertungund voting script, anzahl kommentare und bewertungen, sql bewerungssystem, sql durchschnittliche anzahl, bewertung bilder php durchschnitt, durchschnitts bewertungssystem, bewertung php kommentare, bewertungssystem durchschnitte sql, bewertung 1 bis 10 durchschnitt php, sql durchschnittliche bewertung, durchschnitt bewertung anzahl, mysql anmeldungen pro tag, sql rating und kommentar code, bewertung mit anzahl bewertungen, caid tabellen

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:18 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