0

例を次に示します。「アーティスト」と「絵画」を含むデータベースがあります。アーティストの情報(URLからアーティストIDを取得)とそのアーティストに関連付けられているすべての絵画を含むページを作成する必要があります。両方のテーブルをリンクしています。

1つのステートメントだけでその要求を行う方法はありますか?

私はこれを試しました:

SELECT * 
FROM artiste, toile 
WHERE artiste_id = {$id} AND 
      fk_artiste_id = artiste_id

動作しますが、データを取得するためにしばらく使用しているため、アーティストの情報の3倍を取得し(そのアーティストに関連付けられている絵画が3つあるため)、GROUPBYartiste_idを実行すると1人のアーティストしか取得できません。それは最初の絵であり、すべてではありません。

御時間ありがとうございます!(私の貧弱な英語を失礼します)。

4

3 に答える 3

4

あなたが得ている結果は、実際には静かな正常です。実際には、特定のアーティストからすべての絵画を取得し、各絵画にアーティストの情報を追加しています。アーティスト情報用と絵画用の2つのクエリを実行することを検討できます。または、クエリを保持して、ループの前にアーティスト情報を出力し、ループ内にペイント情報を出力して、それに追加されたアーティスト情報をスキップすることもできます。

于 2012-08-05T02:20:51.667 に答える
2

絵画に関する情報のみが必要な場合は、そのテーブルに関する情報のみを照会できます。

SELECT 
    toile.* 
FROM 
    artiste, toile 
WHERE 
    artiste.artiste_id = {$id} AND 
    toile.fk_artiste_id = artiste.artiste_id

これが完全にMySQLと互換性がない場合は申し訳ありませんが、私は最近MSSQLを使用しています。

編集:別の方法は、を使用することINNER JOINです。繰り返しますが、正確な構文が間違っている場合に誰かが修正できる場合は、次のようになります。

SELECT 
    toile.* 
FROM 
    toile INNER JOIN artiste ON artiste.artiste_id = toile.fk_artiste_id 
WHERE
    artiste.artiste_id = {$id}

両方の部分が別々のクエリにある必要があります。必要に応じて、取得するデータセットごと、または質問する質問ごとに1つのクエリが必要です。質問が「アーティストXについて私が持っているデータは何ですか?」である場合。次に、それに答えるクエリを作成します。あなたの質問が「アーティストXの絵である私が持っている画像は何ですか?」である場合。次に、これは別のクエリで処理する必要がある別の質問です。

http://sqlfiddle.com/#!3/47ff0/2

于 2012-08-05T02:18:27.993 に答える