2009-06-01 17 views
2

私はディレクトリを作成しようとしていますが、私はエントリと場所の2つのテーブルを持っています。各エントリは複数の場所を持つことができるので、私は最良のアイデア(間違っていれば正しい)は、私が 'リンク'を指定する第3のテーブルを作成することだと仮定しています。例:PHPのMySQL結合テーブル

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

私はフランスの人々をリストアップしたいとき、私はその3番目のテーブルに行き、location = Franceの名前をプルします。私はこの時点まですべてをやっても問題ないですが、今はフランスの各人の名前ごとにエントリテーブルからデータを取得する必要があります(3番目の表による)。私はこれが前に行われているのを見てきたと確信しています。すべてのポインタ? :D

答えて

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

私はその子犬に返される列を制限し、WHEREセクションにいくつかのNOT IS NULL句を追加します。そうしないと、意図しない結果が出るでしょう。 – Eric

+2

私はOPがエントリ名を望んでいることを知っているだけなので、それに限定しました。残りの部分については、IS NOT NULLを意味し、必要ではありません。 NULLは決して 'フランス'と一致しません。 – chaos

+0

この場合、INNER JOINの方が良いですか?たとえば、フランスの人々を表示することが必要な場合は、pplなしの国を表示することは望ましくありません。 –

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

は覚えている:私はそこに使用される名前を変更します。

  • を私は "entryt" "locationt"
として
  • と位置テーブルとしてエントリテーブルの名前

    フランスに住むすべての人々と「名前」を返す必要があります。

    かなりうまくいくでしょうか。それでも、私が間違っていれば私を修正してください。

  • 0

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

    私は「entry.name」と「links.location」と「エントリ」&「リンク」とカラム名としてテーブル名を想定しています。