2009-06-01 9 views
2

J'essaie de créer un répertoire et j'ai deux tables, l'entrée et l'emplacement. Chaque entrée sera capable d'avoir plusieurs emplacements, donc je suppose que la meilleure idée (correcte si elle est fausse) est de créer une troisième table où je spécifie des 'liens'. Exemple:PHP MySQL Joining Tables

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

Quand je veux à la liste des gens de France je vais dans cette troisième table et tirer vers le haut où les noms location = en France. Je vais bien tout faire jusqu'à présent, mais maintenant j'ai besoin de récupérer les données de la table d'entrée pour chaque nom de chaque personne en France (selon le troisième tableau). Je suis presque sûr d'avoir déjà vu ça. Des pointeurs? : D

Répondre

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

Je limiterais les colonnes retournées sur ce chiot, et j'ajouterais quelques clauses NOT IS NULL dans la section WHERE. Sinon, vous obtiendrez des résultats inattendus. – Eric

+2

Je sais seulement avec certitude que OP veut le nom d'entrée, donc je me suis limité à cela. Pour le reste, vous voulez dire que ce n'est PAS NUL, et ils ne sont pas nécessaires; NULL ne correspondra jamais à 'France'. – chaos

+0

Est-ce que INNER JOIN n'est pas meilleur dans ce cas? Si nous voulons, par exemple, répertorier les personnes de France, nous ne voulons pas voir les pays de la ppl. –

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

Rappelez-vous: Modifiez les noms que j'ai utilisé là-bas:

  • Je l'ai appelé la table d'entrée comme "entryt"
  • Et la table de l'emplacement comme "locationt"

Devrait retourner "nom" avec toutes les personnes qui vivent en France.

Assez sûr que cela fonctionnerait. Toujours, corrigez-moi si je me trompe.

0

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

Je pris les noms de table comme 'entrée' & 'liens' et les noms de colonnes comme 'entry.name' et 'links.location'.