MySQL Join verwenden
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
argument
aufrufen
befehl
code
dank
date
datum
email
ergebnis
frage
hinweis
http
kommentar
nachricht
not
spalte
tabelle
test
url
versuchen
-
Hallo,
undzwar hab ich folgendes Problem:
Ich möchte aus der news und news_comments tabelle was auslesen.
Aus der news tabelle halt die news und aus der news_comments tabelle halt die kommentare.
Jedoch möchte ich noch das bei den news steht "xxx Kommentare" .
Wie kann ich das JOIn so werden das er mir die daten ausgibt und gleichzeitig die datensätze in news_comments zählt die zu der ID der news passt.
Gruß Epiaa -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Mal angenommen in news und news_comments existiert eine Spalte mit dem Namen id und in news eine spalte nachrichten und in news_comments eine Spalte kommentare.
$deineid ist eine variable die du mit der id befüllen musst.
SELECT news.nachrichten , news_comments.kommentare, COUNT( news_comments.kommentare) AS "anzahlkommentare" FROM news,news_comments WHERE id = $deineID
ungetestet, am besten testest du das in Deinem mysql zugang.
Edit:
code korrigiert nachdem ich ihn überflogen habe.... (sum durch count ersetzt)
Beitrag zuletzt geändert: 24.9.2010 20:39:22 von simuliertes -
Hallo,
danke für die schnelle antwort jedoch weiß ich gerade nicht was du mit "anzahlkommentare" meinst...
id news_id name email comment
Soe sieht meine news_comments tabelle aus.
SELECT news.date, news.posted_by, news.categorie, news.title, news.beitrag, news_comments.news_id, news_comments.name, news_comments.email, news_comments. comment, COUNT( news_comments.news_id) AS "anzahlkommentare" FROM news,news_comments WHERE news_id = $deineID
meine frage ist woher ich das WHERE news_id='' bekomme ... -
Ich weiß jetzt zwar nicht ganz genau, worauf du hinaus willst. Aber versuche doch die Einträge zu Gruppieren nach news_id über GROUP BY und dann das ganze zu zählen über COUNT.
So in etwa:
SELECT news.news_id, news.date, news.posted_by, news.categorie, news.title, news.beitrag, news_comments.name, news_comments.email, news_comments.comment, COUNT(comment) AS "comment_count" FROM news, news_comments WHERE news.news_id = news_comments.news_id; GROUP BY news.news_id;
Beste Grüße
Christopher
Beitrag zuletzt geändert: 25.9.2010 14:06:32 von schaedlich -
epiaa85 schrieb:
Hallo,
danke für die schnelle antwort jedoch weiß ich gerade nicht was du mit "anzahlkommentare" meinst...
anzahlkommentare ist ein alias (durch das "as").
Sprich es existiert natürlich nicht in Deiner Tabelle enthält aber die summe aller kommentare (dieser id).
Du kannst sie wie einen tabelleneintrag abrufen.
anzahlkommentare = anzahl der kommentare, irgendwie logisch oder ?
mmhh ok also ich versuche mal wiederzuzgebven was Du willst:
Du willst eine news mit einer id (die dir bekannt ist) aufrufen.
Passend dazu alle kommentare die zu der news abgegeben wurden.
UND die anzahl der Kommentare zu dieser news.
meine frage ist woher ich das WHERE news_id='' bekomme ...
die namen "news_id" sind ja in beiden Tabellen identisch.
Also könntest Du..
WHERE news.news_id = $deineID AND news_comments.news_id= $deineID
...schreiben.
Oder verkürzt:
WHERE news_id = $deineID
Oder willst Du alle news + comments +die jeweilige anzahl aufrufen?
Dann sollte Dir der Code von schaedlich helfen
edito:
mal Deinen code korrigiert:
SELECT
news.date, news.posted_by, news.categorie, news.title, news.beitrag,
news_comments.news_id, news_comments.name, news_comments.email, news_comments.comment,
COUNT( news_comments.comment) AS "anzahlkommentare"
FROM news,news_comments
WHERE news_id = $deineID
Beitrag zuletzt geändert: 25.9.2010 15:38:41 von simuliertes -
<? $ergebnis = mysql_query('SELECT news.date, news.posted_by, news.categorie, news.title, news.beitrag, news_comments.news_id, news_comments.name, news_comments.email, news_comments.comment COUNT( news_comments.comment) AS "anzahlkommentare" FROM news,news_comments WHERE news.id ='. $row->id .' AND news_comments.news_id='. $row->id .''); while($row = mysql_fetch_object($ergebnis)) { echo '<h1>'. $row->title .'</h1>'; echo '<h3>Datum: '. $row->date .' | eingestellt von <a href="#">'. $row->posted_by .'</a></h3>'; echo '<p>'. $row->beitrag .' <br /><a href="index.php?page=detail&id='. $row->id .'">Mehr ...</a></p>'; echo '<p class="details">| Posted by <a href="#">'. $row->posted_by .'</a> | Kategorie: <a href="#">'. $row->categorie .'</a> | Comments: <a href="#">'. $anzahlkommentare .'</a> |</p>'; } ?>
So sieht mein script nun aus.
edit:: So habe das Script mal nen bisschen überarbeitet ...
leider muss ich feststellen das ich folgenden fehler bekomme
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /var/www/web2/html/test/inc/news.php on line 3
Beitrag zuletzt geändert: 26.9.2010 11:19:09 von epiaa85 -
$row->news_id
Wird trotzdem nicht funktionieren, nimm den code von schaedlich, ich rate jetzt mal das du das meintest
Ich denke es wurde alles gesagt + gerätselt was genau du willst.
Wie gesagt kannst Du sql-befehle bequem im mysql (phpmyadmin) testen.
Verwaltung->Addons->Datenbank-Tools->phpMyAdmin ->einloggen->links oben das dritte Bild von links "Abfragefenster".
Beitrag zuletzt geändert: 26.9.2010 11:31:55 von simuliertes -
ne es funktioniert nicht ds ist ja mein problem ... es erscheint eine fehler meldung :
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /var/www/web2/html/test/inc/news.php on line 3
-
Antwort siehe oben, ansonsten:
http://www.bsro.tue.bw.schule.de/vb/vbhilfe/vb-hilfe/sql.htm
http://www.little-idiot.de/mysql/mysql.html#toc28
Edit:
Also als ernst gemeinter tip:
SChreib erst einmal Deinen Code und guck ob da irgendwo flüchtigkeitsfehler sind (komma vergessen , bezeichnung falsch usw. ).
Dann teste ihn ausführlich , die fehlermeldung gibt Dir ja einen hinweis.
In diesem fall ist was im sql-syntax falsch also sql-code seperat , wie bereits beschrieben testen, dort kommt ein detailierterer hinweis über die fehlerquelle.
Wenn Dir gepostete befehle neu sind schau nach was sie bewirken , statt einfach zu raten, quellen gibts im www genug.
Wenn das alles nichts hilft , im forum fragen.
Dabei ist es nützlich die antworten auch zu lesen und fragen zu beantworten.
Beitrag zuletzt geändert: 26.9.2010 12:01:39 von simuliertes -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage