Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

Abfrage gemischter Datentypen

Diskussion: Abfrage gemischter Datentypen im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Hallo HaBo, folgende Situation: Ich habe 3 Tabellen... - page_news - page_users - page_comments ... und will bestimmte Felder ...

Antwort
Alt 15.06.08, 17:39   #1 (permalink)
 
Registriert seit: 11.06.05
snoggo Leistung: Facit NTK
Likes: 0
Standard Abfrage gemischter Datentypen

Anzeige

Hallo HaBo,

folgende Situation:
Ich habe 3 Tabellen...
- page_news
- page_users
- page_comments
... und will bestimmte Felder aus der page_news auslesen. In der page_news steht nur eine ID fuer den Benutzer, welche mit den Benutzerinformationen aus der page_users verknuepft ist. Soweit ist das kein Problem, Abfrage funktioniert mit einer WHERE-Anweisung einwandfrei.
Jetzt will ich allerdings die Anzahl der Kommentare des jeweiligen Beitrages auslesen. Die Abfrage einfach um ein 'COUNT(page_comments.*) AS count' ... 'WHERE page_comments.news_id = page_news.id' zu erweitern funktioniert leider nicht.
Auch ein LEFT JOIN bekomme ich nicht zum Laufen. Ich such schon seit 2 Stunden nach dem Fehler, kann aber keinen entdecken. Dazu kommt, dass ich mir nicht sicher bin, an welche Stelle das LEFT JOIN gehoert, wenn ich noch weitere einschraenkungen wie LIMIT oder WHERE benutze.
Waere nett, wenn ihr da mal einen Blick drauf werfen wuerdet, vielleicht seht ihr den Fehler ja sofort.

Die Abfrage:

Code:
SELECT
	page_news.id AS id,
	page_news.date AS date,
	page_news.user_id AS user_id,
	page_news.title AS title,
	page_news.text AS text,
	page_news.image AS image,
	page_news.image_title AS image_title,
	page_users.username AS user_name,
	COUNT(page_comments.*) AS cnt
FROM
	page_news,
	page_users
LEFT JOIN
	page_comments
ON
	page_comments.news_id = page_news.id
WHERE
	page_news.user_id = page_users.id
ORDER BY
	page_news.id DESC
LIMIT
	0, 5
Ach ja: wenn man kein LEFT JOIN benutzt sondern nur die WHERE-Anweisung (wenn ich mich nicht irre ist das gleich einem JOIN), zeigt er nur die Eintraege an, wo Kommentare existieren.

mfg
snoggo
snoggo ist offline   Mit Zitat antworten
Alt 16.06.08, 00:05   #2 (permalink)
LX
Moderator
 
Registriert seit: 14.02.06
LX Leistung: Z3
LX eine Nachricht über ICQ schicken LX eine Nachricht über AIM schicken LX eine Nachricht über Yahoo! schicken
Likes: 21
Standard

WIe wär's damit (ungetestet):

Code:
SELECT
	page_news.id AS id,
	page_news.date AS date,
	page_news.user_id AS user_id,
	page_news.title AS title,
	page_news.text AS text,
	page_news.image AS image,
	page_news.image_title AS image_title,
	page_users.username AS user_name,
	COUNT(page_comments.*) AS cnt
FROM
	page_news
LEFT JOIN
	page_users ON page_news.user_id = page_users.id
LEFT JOIN
	page_comments ON page_comments.news_id = page_news.id
GROUP BY
	page_comments.news_id
ORDER BY
	page_news.id DESC
LIMIT
	0, 5
Für COUNT() in Verbindung mit normalen Feldern wird noch eine GROUP BY Klausel benötigt, sonst weiß MySQL ja nicht, welche Werte eigentlich gezählt werden sollen.
__________________
"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

JS BB LX UP
LX ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 16.06.08, 20:32   #3 (permalink)
Themenstarter
 
Registriert seit: 11.06.05
snoggo Leistung: Facit NTK
Likes: 0
Standard

Leider nicht. Danke fuer den Versuch

Die Beziehungen:
page_news enthaelt eine eindeutige id.
page_news enthaelt eine user_id, die mit einer 1:1-Verbindung einem Eintrag aus page_users zugeordnet wird. Das ist kein Problem.
page_comments enthaelt eine news_id, es koennen n Eintraege aus page_comments einem Eintrag aus page_news zugeordnet werden.

Ich komm nicht weiter
snoggo ist offline   Mit Zitat antworten
Alt 17.06.08, 03:06   #4 (permalink)
Member of Honour
 
Benutzerbild von easteregg
 
Registriert seit: 14.09.07
easteregg Leistung: Pentium Ieasteregg Leistung: Pentium I
easteregg eine Nachricht über ICQ schicken
Likes: 62
Standard

und das ganze über nen extra query?
sowas in die richtung?

Code:
SELECT
	page_news.id AS id,
	page_news.date AS date,
	page_news.user_id AS user_id,
	page_news.title AS title,
	page_news.text AS text,
	page_news.image AS image,
	page_news.image_title AS image_title,
	page_users.username AS user_name,
	(SELECT COUNT(*) FROM page_comments WHERE page_comments.news_id = page_news.id) as cnt
FROM
	page_news
LEFT JOIN
	page_users ON page_news.user_id = page_users.id
LEFT JOIN
	page_comments ON page_comments.news_id = page_news.id
GROUP BY
	page_comments.news_id
ORDER BY
	page_news.id DESC
LIMIT
	0, 5
__________________
» Flattr mich! - Wenn dir mein Beitrag geholfen hat! «
<| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |>
easteregg ist gerade online   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » Abfrage gemischter Datentypen
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 an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
SQL Abfrage Prophion Code Kitchen 5 29.01.09 18:24
SQL-Abfrage mauralix Code Kitchen 8 12.02.07 13:29
SQL Abfrage sfil Code Kitchen 4 21.03.05 22:52
Datentypen in c++??? Andy18 Code Kitchen 10 19.07.04 07:31
SQL Abfrage Tomekdomek (Web-) Design und webbasierte Sprachen 4 28.02.02 09:36


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61