MySQL - Abfrage mit vier Tabellen.

Strafi

Erfahrenes Mitglied
Hallo,

Es wird eben mit der Zeit immer schlimmer. :)

Ich habe 4 Tabellen, aus denen ich mir die Daten zusammensuche und natürlich aus gebe.

Das funktioniert auch, nur wenn ich zu einem Datensatz in der Tabelle 4 mehrere Datensätze finde, so wird mir der Datensatz dann so oft ausgegeben wie er zusätzliche Daten aus Tabelle 4 hat.

Kleines Beispiel:


PHP:
$db->prepare("
			SELECT
				r.daten_eins,
				t.daten_zwei,
			              u.daten_drei
				s.daten_vier
				
			
				
			FROM
				tabelle1 r
			LEFT JOIN
				tabelle2 t
			ON
				r.id = t.a_id
			LEFT JOIN
				tabelle3 u
			ON
				r.user_id = u.id
			LEFT JOIN
				tabelle4 s
			ON
				s.ionid = t.id
			AND
				s.tabelleid='23'
			
			".$where."
			ORDER BY
				r.datum DESC
			
		");

Also in Tabelle4 können nun mehre Datensätze zum gesuchten Datensatz gehören. Wie kriege ich das weg das er mir nur den Datensatz 1x ausgibt und nicht so oft wie Datensätze in Tabelle4 vorhanden sind.


Grüße
 
Das Problem ist, welchen der Datensätz aus Tabelle 4 willst du anzeigen? Einfach einer, egal welcher? Oder willst du die Daten aus tabelle4 auf eine Zeile zusammenfassen, also Kommagetrennt?
 
ja die daten au tabelle4 werden später dann in eine zeile geschrieben, das geht auch schon. ich will halt nur unterdrücken. er soll eine ausgabe geben.
 
und welche soll er ausgeben? Die erste? Den höchsten Wert, den kleinsten Wert oder was? SQL kann nicht selber entscheiden. Das musst du vorgeben.
 
mmm egal... der wert wird ja nciht angezeigt... es kann aber sein.. das in dieser tabelle4 auch keine daten dazu sein müssen.
 
Wozu hast du denn die Tabelle4 angehängt, wenn du deren Werte nicht brauchst?. Dann lass sie einfach weg.
 
doch doch ich rbauch die schon wenn sie da sind... also alle anderen daten aus alle anderen tabellen haben ihr eignes feld und es steht auch überall nur ein wert drine. das ist ein datensatz der eine id besitzt. zu diesem datensatz wird unter dessen id in tabelle4 werde abgelegt, also ID 45 hatt drei einträge. oder auch nicht, das ist egal, wenn keine einträge in tabelle4 zu diesem datensatz existieren, dann wird der auch nur einmal angezeigt. steht in tabelle4 nur ein eintrag zu dem datensatz, dann wird auch nur einmal alles angezeigt.

ich hole später alle einträge aus tabelle4 und schreibe sie zu einem wert. Wichtig ist erst einmal, das er das ignoriert. das ist alt ne suchanfrage...
 
Also, wenn du die Werte der Tabelle 4 nur im WHERE-Bereich für die Suche brauchst, dann kannst du sie im SELECT-Teil weglassen und am Anfang noch den SELECT-Zusatz DISTINCT verwenden

SQL:
SELECT DISTINCT
	t1.*,
	t2.*
	t3.*
FROM
	table1 AS t1
	LEFT JOIN table2 AS t2 ON t1.id = t2.id
	LEFT JOIN table3 AS t3 ON t1.id = t3.id
	LEFT JOIN table4 AS t4 ON t1.id = t4.id
WHERE
	t4.name LIKE '%foo%'
 
Zuletzt bearbeitet von einem Moderator:
Nee will nicht gehen...

PHP:
$qry = $db->prepare("
			SELECT DISTINCT
				r.*,
                                                        t.*,
				u.*,
                                                        s.*,
			FROM
				anfragen r
			LEFT JOIN
				transaktionen t
			ON
				r.id = t.a_id
			LEFT JOIN
				frontend_user u
			ON
				r.user_id = u.id
			LEFT JOIN
				status s
			ON
				s.onid = t.id
			AND
				s.tableid='44'
			
			".$where."
			ORDER BY
				r.datum DESC
			LIMIT
				".SmartyPaginate::getCurrentIndex().",".SmartyPaginate::getLimit()."
		");
		$qry->execute();
		$requests = $qry->fetchAll();

so sieht das jetzt aus. bringt immer noch mehrere einträge mit.
 

Neue Beiträge

Zurück