Verknüpfung INNER JOIN und Mysql

  • #1
H

HendrikO

Bekanntes Mitglied
Themenersteller
Dabei seit
01.04.2005
Beiträge
60
Reaktionspunkte
0
Hallo Folks,

ich hab ein Problem, an dem ich jetzt schon einige Stunden hänge:

Ich habe einen Datensatz auf 4 Tabellen aufgeteilt. Jetzt möchte ich alle Datensätze anzeigen und zwar mit ausgesuchten Spalten. Ich dachte mir etwas mit:

Code:
<?
$sql=SELECT  * FROM .BEGLEITER. 
                           INNER JOIN .ORT. ON	.BEGLEITER..ORT_fk = .ORT..ID
                           INNER JOIN .SCHULE. ON.BEGLEITER..SCHULE_fk = .SCHULE..ID
                           INNER JOIN .SCHULART. ON .SCHULE..Schulart_fk = .SCHULART..ID
;
	
	$result = mysql_query($sql) OR die(mysql_error());	
	while($all= mysql_fetch_assoc($result))	{
		print_r($all);
}
 ?>

aber das funktioniert nicht (ich habe natürlich vorher eine Connect-Funktion benutzt). Ich bekomme immer nur einen Datensatz ausgegeben. Wenn ich die Abfrage etwas abändere (ohne inner join) dann bekomm ich ganz viele Datensätze zurück. Ich habe schon gegoogelt aber noch nix gefunden.

Ich bräuchte einfach nur eine Abfrage, welche mir alle Details eines Datensatzes liefert, über mehrere Tabellen hinweg. Wie geht das?

Danke für eure Hilfe
 
  • #2
OK, mal ein gedachtes Beispiel ;)

Voraussetzung ist, dass in den Nebentabellen die ID der Haupttabelle ($tbl_1) gespeichert wird (z.B. id_fk).

Code:
<?php
$tbl_1 = BEGLEITER;
$tbl_2 = ORT;
$tbl_3 = SCHULE;
$tbl_4 = SCHULART;

$sql = SELECT t1.*, t2.plz, t2.ort, t3.schulname, t4.schulart ; 
$sql .= \n FROM . $tbl_1 . t1 ;
$sql .= \n LEFT JOIN . $tbl_2 . t2 ON (t1.id=t2.id_fk) ;
$sql .= \n LEFT JOIN . $tbl_3 . t3 ON (t1.id=t3.id_fk) ;
$sql .= \n LEFT JOIN . $tbl_4 . t4 ON (t1.id=t4.id_fk) ;

$result = mysql_query($sql) or die(mysql_error());

if($num = mysql_num_rows($result)) {
	while($obj= mysql_fetch_array($result, MYSQL_BOTH)) {
		print_r($obj);
		echo <hr>;
	}
}
else {
	echo Keine Datensätze gefunden.;
}
?>

Möchtest du z.B. nur Datensätze Gymnasien aus Stuttgart gelistet bekommen, hängst du hinten noch eine WHERE-Klausel drann.

Code:
$sql = .....
$sql .= .....
$sql .= \n WHERE t2.ort =->Stuttgart' AND t4.schulart =->Gymnasium';

Hoffe ich habe deine Frage richtig verstanden :°, wenn nicht, war es aber gut das wir mal drüber gesprochen haben :2funny: :2funny:
 
  • #3
Hallo PCDConny,

na schau mal einer guck, dat geht. Ich habe den Code noch etwas abgeändert, das Ausschlaggebende daran war das LEFT JOIN, statt Inner! Die Foreign-Keys hatte ich schon vorher gesetzt :coolsmiley:. Falls es jemanden interessiert hier noch mal der Code und besten Dank :1

Code:
$sql=SELECT 
		.BEGLEITER..ID,
		.BEGLEITER..Name,
		.BEGLEITER..Vorname, 
		.BEGLEITER..Straße, 
		.BEGLEITER..Hausnummer, 
		.ORT..PLZ, 
		.ORT..Ort, 
		.ORT..Ortsteil, 
		.SCHULE..Schulname, 
		.SCHULART..Schulart, 
		.SCHULE..Klasse, 
		.SCHULE..Schulort,
		.BEGLEITER..Ausbildungsende, 
		.BEGLEITER..Registrierungsdatum,
		.BEGLEITER..Austritt,
		.BEGLEITER..Aktiv		
	FROM 
		.BEGLEITER. 	
			LEFT JOIN .ORT. 		ON	.BEGLEITER..ORT_fk = .ORT..ID
			LEFT JOIN .SCHULE. 	ON 	.BEGLEITER..SCHULE_fk = .SCHULE..ID
			LEFT JOIN .SCHULART.	ON	.SCHULE..Schulart_fk = .SCHULART..ID

;
	$result = mysql_query($sql) OR die(mysql_error());	
	while($all= mysql_fetch_assoc($result))	{
		print_r($all);
}
 
Thema:

Verknüpfung INNER JOIN und Mysql

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben