2011-08-05 4 views
2

は、いくつかのPHPを経て、最初の我々は二つのテーブル持って言うことができます:画像テーブルからMySQLの関係と連動取得データ

Users 
user_id name email 

Images 
image_id user_id url 

user_iduser_idを関係で連結されます。

私は、IDでユーザーを選択し、ユーザーが見つかったかどうかを確認してから、イメージテーブルに別のクエリを作成し、num行を確認して戻り値をループする機能があります私はそれを使用して、ユーザーと、共同クエリを実行せずにユーザーにリンクされているすべてのイメージを選択することができます。

これはあなたの結果セットを取得するために内部結合を使用することにより、1つのクエリではなく2で行うことができます任意の助け

答えて

1

「共同クエリを実行しないで」と言うと、「2つのクエリを実行せずに」ということになります。

実際、あなたが望むのはおそらくLEFT JOINです。アイデアは、いくつかのIDと一致するユーザテーブルからユーザを選択し、イメージテーブルをLEFT JOINすることです。ユーザーのイメージが存在しない場合、左の結合によってNULL値が与えられます。通常の結合を使用する場合、一致するレコードがイメージ・テーブルに存在しないという事実により、行が返されません。ここで

は一例です:として今

name email url 
----- ----- ----- 
John [email protected] abc.jpg 
John [email protected] def.jpg 
John [email protected] ghi.jpg 

を:

SELECT u.name, u.email, i.url 
FROM Users u 
LEFT JOIN Images i ON (i.user_id = u.user_id) 
WHERE u.id = @SpecificUserID; 

ユーザIDを想定すると、発見され、そのユーザーのためのいくつかのイメージがありますが、あなたはこのように見える結果を取得しますあなたが見ることができます、名前と電子メールの値は繰り返し続けます。各行に固有の画像URLと、一致するユーザー名と電子メールが表示されます。

一度に1人のユーザーしか選択できない場合、これはループで処理するのが簡単です。最初の繰り返しで、3つの値すべてを読み込みます。それ以降の反復では、URLを読んでリストまたは配列に追加してください。ここで

に関する有用なチュートリアルが参加している:Understanding JOINs in MySQL and Other Relational Databases

0

いただきありがとうございます。このクエリでは

$sql = "SELECT u.user_nid, i.url 
    FROM tbl_user u 
    INNER JOIN i.user_nid = u.user_nid 
    WHERE user_nid = ?" 

あなたは、ユーザーのイメージのリストを受け取ることになりますし、何のイメージが存在しない場合は、ゼロの行リターンを持っていますよりも、返品・ユーザーが存在しません。

0

をあなたは、単一のクエリで複数のテーブルからデータを取得するために参加を使用する必要があります。

foreign keyリレーションシップは制約を適用します。例:実際にテーブルBに記録されていないテーブルBのキーを参照してテーブルAにレコードを挿入することはできません。

関連する問題