2009-06-01 14 views
2

Ich versuche, ein Verzeichnis zu erstellen, und ich habe zwei Tabellen, Eintritt und Lage. Jeder Eintrag kann mehrere Standorte haben, daher nehme ich an, dass die beste Idee (richtig, wenn falsch) darin besteht, eine dritte Tabelle zu erstellen, in der ich 'Links' vorschlage. Beispiel:PHP MySQL Tabellen Joining

Marly:France 
Karla:Argentina 
Smith:USA 
Katie:France 
Smith:United Kingdom 
Katie:USA 

Wenn ich will Menschen aus Frankreich zur Liste ich in diese dritte Tabelle gehen würde, und ziehen Sie Namen, wo location = Frankreich. Mir geht es gut, alles bis zu diesem Punkt zu tun, aber jetzt muss ich Daten aus der Eingangstabelle für jeden Namen jeder Person in Frankreich abrufen (gemäß der dritten Tabelle). Ich bin mir ziemlich sicher, dass ich das schon mal gesehen habe. Irgendwelche Zeiger? : D

Antwort

1
SELECT `entry`.* 
FROM `entry` 
JOIN `entry-locations` ON `entry-locations`.`entry-id` = `entry`.`name` 
WHERE `entry-locations`.`location` = 'Aberdeen' 

$res = mysql_query('all-that-stuff-above'); 
while($row = mysql_fetch_assoc($res)) { 
    echo $row['name'] . "\n"; 
} 
mysql_free_result($res); 
+0

Ich würde begrenzen die Säulen an diesem Welpen zurück, und ich würde ein paar NOT IS NULL-Klauseln in der WHERE-Abschnitt hinzuzufügen. Andernfalls werden Sie unbeabsichtigte Ergebnisse erhalten. – Eric

+2

Ich weiß nur sicher, dass OP den Namen des Eintrags will, also beschränke ich mich darauf. Was den Rest betrifft, meinen Sie, dass IS NOT NULL ist, und sie sind nicht notwendig; NULL wird niemals "Frankreich" entsprechen. – chaos

+0

Ist INNER JOIN in diesem Fall nicht besser? Wenn wir beispielsweise Personen aus Frankreich auflisten möchten, möchten wir keine Länder ohne Länder sehen. –

1
SELECT 
    entryt.name AS name, 
    locationt.location AS location 
FROM locationt, entryt 
WHERE locationt.location = "France" 

Denken Sie daran: die Namen ändern ich dort verwendet:

  • ich den Eintrag Tabelle als "entryt" genannt
  • Und die Positionstabelle als "locationt"

Sollte zurückkehren „name“ mit all den Menschen, die in Frankreich leben.

Ziemlich sicher, dass das funktionieren würde. Korrigiere mich trotzdem, wenn ich falsch liege.

0

SELECT * FROM entry WHERE name in (SELECT name FROM links WHERE location = 'FRANCE');

Ich habe die Tabellennamen als 'Eintrag' & 'Links' und Spaltennamen als 'entry.name' und 'links.location' angenommen.