Abfrage - für mich kompliziert - help

ultrakollega

Erfahrenes Mitglied
Hallo Leute,

ich habe folgende drei Tabellen:

---------------------------------------------------------
1) bundeslaender

id | bundesland

2) regionen

id | b_id | region

3) orte

id | r_id | ort
---------------------------------------------------------

Also, die Tabelle regionen ist über die b_id mit der tabelle bundeslaender
verknüpft, und die Tabelle orte ist über die r_id mit der Tabelle regionen
verknüpft.

So nun gibt es eine weitere Tabelle wo ich Kontakte speichere. Bei den
Kontakten speichere ich aber nur die o_id (ORTE ID). Ich dachte mir so
komme ich zur zugehörigen Region und dann zum zughörigen Bundesland.

Wie müßte jetzt eine Abfrage aussehen damit ich über die o_id an die Region
und das Bundesland komme Hab schon ewig hin und her probiert und
mit den JOINS komme ich auch nicht weiter ...

Ich hoffe ihr könnt mir helfen und einen Tip oder ein Beispiel posten?

Vielen Dank!
 
Um das Bundesland zu einer Person auszugeben müsste folgendes hinhauen.
Code:
SELECT bundesland FROM bundeslaender WHERE ID IN(SELECT b_id FROM regionen WHERE ID IN (SELECT r_id FROM orte WHERE ID = $übergebeneOrtsID))
Das wäre, wenn MySQL mehrfach geschachtelte Subqueries erlaubt (kA ob es das tut) die Syntax. Wenn jetzt noch jemand der JOINS mächtig ist, kann er dir das sicherlich übersetzen, wei ldie JOINS doch um einiges performanter sind.

edit: Leider musste ich grade feststellen, dass verschachtelte Subqueries oder Subqueries allgemein sogar - konnte ich nicht genau erkennen - erst ab MySQL 4.1 möglich sind und die Version befindet sich noch im alpha Stadium.
Also Bühne frei für die JOIN Spezialisten.
 
Zuletzt bearbeitet:
danke aber ...

Danke Tim,

aber es funktioniert leider nicht ...

Bekomme > ... is not a valid MySQL result resource ...

Datenbankanbindung paßt aber ...



ultra
 
Ok dann Joinen wir mal :)

oK du hast die id vom Ort und möchtes die region und das Bundesland:

select bundesland.b,region.r,ort.o from orte as o left join regionen as r on r.id = o.r_id left join
bundeslaender as b on b.id = r.b_id where o.id = "$ortsid"

Zusatz:
Eigendlich schade das MySql dann nicht mehr direkt von PHP untestützt wird wenn MySql
erwachsen wird und Subselects kann :-(
 
danke, aber ...

Hi,

ich bekomm da aber noch folgenden Fehler:

Code:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/www/xxxxxx/_code/test.php on line 25
1109: Unknown table 'bundesland' in field list

Die Tabelle bundesland gibt es aber!!

Code:

PHP:
$server = "xxx.xxx.xxx.xxx";
$user = "xxxxxx";
$pass = "xxxxxx";
$dbase = "xxxxxx";

$conn = @mysql_connect($server, $user, $pass);

if($conn) {
   mysql_select_db($dbase, $conn);
} else {
   die("Fehler, Verbindung konnte nicht hergestellt werden!");
}

$sql = "SELECT bundesland.b,region.r,ort.o
FROM orte as o left join regionen as r on r.id = o.r_id left join bundeslaender as b on b.id = r.b_id
WHERE o.id = '1'";
			
$res = mysql_query($sql);
$row = mysql_fetch_array($res, MYSQL_ASSOC);

$sqlerror = mysql_errno() . ": " . mysql_error();
echo $sqlerror."<br><br>";
die;

Hier nochmal meine Tabellen:

Code:
CREATE TABLE `bundeslaender` (
  `id` int(4) unsigned NOT NULL auto_increment,
  `bundesland` varchar(18) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;

CREATE TABLE `regionen` (
  `id` int(4) unsigned NOT NULL auto_increment,
  `b_id` varchar(4) NOT NULL default '',
  `region` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;

CREATE TABLE `orte` (
  `id` int(4) unsigned NOT NULL auto_increment,
  `r_id` varchar(4) NOT NULL default '',
  `ort` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM ;

Vielen Dank
 
PHP:
$sql = "SELECT bundesland.b,region.r,ort.o
FROM orte as o left join regionen as r on r.id = o.r_id left join bundeslaender as b on b.id = r.b_id
WHERE o.id = '1'";

muss das nicht heissen:

PHP:
$sql = "SELECT b.bundesland,r.region,o.ort
FROM orte as o left join regionen as r on r.id = o.r_id left join bundeslaender as b on b.id = r.b_id
WHERE o.id = '1'";

Tabellenalias vor dem Spaltennamen, sonst gibts wirwarr oder nicht? Bin mir nich sicher, aber ich kenne es generell nur so rum.
Und die Fehlermeldung sagt ja auch, dass die Tabelle 'bundesland' nicht vorhanden ist, obwolh es eigentlich bei Dir als Spaltenbezeichnung dient.
 
Zurück