MySQL Join von 2 oder mehreren Tabellen

Joe

Erfahrenes Mitglied
Hallo, ich brauch mal eure Hilfe bei einer Joinabfrage.
Ich möchte alle Zeilen Aus Tabelle1 und Tabelle2 Anhand des Username angezeigt bekommen, auch wenn es in Tabelle 2 oder 1 garkein Eintrag gibt.

Versucht habe ich das wie folgt:
PHP:
		/*SELECT A.EineSpalte, B.EineAndereSpalte   
FROM Tabelle1 AS A JOIN Tabelle2 AS B       
ON A.EinWert = B.EinAndererWert;

			SELECT table1.* from table1
LEFT JOIN table2 ON table1.id=table2.id
where table2.id is NULL

			SELECT * 
FROM   department LEFT OUTER JOIN employee
          ON employee.DepartmentID = department.DepartmentID;*/


			$getBauplan = "SELECT 
				*
			FROM
				BauplanLager
			LEFT OUTER JOIN
			    BauplanBibliothek
			ON
				BauplanLager.Username='$Username'= BauplanBibliothek.Username='$Username'
			WHERE
				BauplanLager.Username='$Username'
			OR BauplanBibliothek.Username='$Username' is NULL";
		$result = mysql_query($getBauplan);
if (!$result) {
	die ('Etwas stimmte mit dem Query nicht: '.$db->error);
}
if(mysql_num_rows($result) != 0) {
	while ($row = mysql_fetch_assoc($result)) {
		for ($i = 0; $i < mysql_num_fields($result); $i++) {
			$field=mysql_field_name($result, $i);
			if (($row[$field] != 0) AND ($field != 'ID')) {
				echo "<p>Bauplan für ".$field." kann studiert werden</p>";
			}
		}
	}
}
if(mysql_num_rows($result) == 0) {
	echo "<p>Momentan hast du keine Baupläne die du studieren könntest</p>";
}

Die Schleifen sind übrigens in Ordnung und funktionieren einwandfrei. Nur die Joinabfrage zeigt egal welcher User eingeloggt ist sämtliche Einträge aller User der 2 Tabellen. Bin mir nicht mal recht in klaren was man für ein Join nehmen sollte CROSS, INNER, LEFT?
Die Tabellen haben bis auf die ID und den Username unterschiedliche Zeilen.

Vielen Dank fürs lesen. Hoffentlich kann mir dabei jemand helfen :)


edit: Sorry hab grad gesehen das ich wohl im falschen Unterforum gepostet habe. Gehört sicher eher in "relationale Datenbanken" :(
 
Zuletzt bearbeitet:
Versteh ich dich Richtig. Du willst sowieso einen Eintrag kriegen, wenn auch in Tabelle 1 oder Tabelle 2 kein Eintrag vorhanden ist.

Dann kannst du zuerst ein SELECT absetzen dass nur aus einer Zeile mit einem Feld besteht und den gesuchten Usernamen beinhaltet. Auf diesen kannst du beide Tabellen mit LEFT JOIN verknüpfen. So hast du immer einen Eintrag, egal was in den 2 Tabellen vorhanden ist

SQL:
SELECT 
    user.name,
    BauplanLager.*,
    BauplanBibliothek.*
FROM
    (SELECT '{$Username}' AS name) AS user
    LEFT JOIN BauplanLager
        ON BauplanLager.Username = user.name
    LEFT JOIN BauplanBibliothek
        ON BauplanBibliothek.Username = user.name
 
Zuletzt bearbeitet von einem Moderator:
  • Gefällt mir
Reaktionen: Joe
Absolut beindruckend!

Diese Funktion bildet also aus einer Variable $Username eine virtuelle/temporäre Tabelle user. Da wäre ich niemals drauf gekommen. Selbst wenn es irgendwo im Netz so ein Beispiel geben würde dann würde man garantiert ne Ewigkeit nach sowas suchen.

Also vielen Dank yaslaw wieder einmal hat mir dein hervorragendes Fachwissen weiter geholfen :)
 
Man hätte sogar eine reale Tabelle User mit Usaername usw. nehmen können. Ich schätze aber dadurch wäre die Zugriffszeit ungemein höher und bei leeren Tabellen ganz und gar verschwendete Zeit. Besser kann man das nicht machen.
 
Zurück