0

私は文字通り PHP / MySQL の学習を昨日始めたので、これが単純な/ばかげた/不適切な言い回しの質問である場合はお詫びします。

私は2つのテーブルでセットアップされたデータベースを持っています:

場所

l_id | loc_name
----------------
1    | France
2    | London
3    | The Moon

アイテム

i_id | item_name | item_loc
----------------------------
1    | Book      | 1
2    | Mirror    | 1
3    | Bread     | 2
4    | Camera    | 2
5    | Cheese    | 3
6    | Ladle     | 3

l_id 番号のリストが提供された場合、loc_name とそれぞれに割り当てられたすべてのアイテムを見つけるにはどうすればよいでしょうか?

これは 1 回のクエリで実行できますか? それとも、名前に対して 1 回、アイテムに対して 1 回、2 回クエリを実行する必要がありますか?

そうではありませんが、他のクエリで JOIN を使用して非常に最小限の成功を収めましたが、それらが機能している理由がよくわかりません。舞台裏のプロセスが何であるか、構文がそれをどのように記述しているかを正確に理解するのに苦労しています。誰かがこの主題に関する読み物を推薦できるなら、それは素晴らしいことです。

助けてくれてありがとう、質問が少しだったらごめんなさい

4

3 に答える 3

1

資料を読むという点では、O'Reilly からSQL を学ぶことは、始めるのに最適な場所です。無料のリソースが必要な場合は、W3Schools SQL チュートリアルで基本をうまく紹介しています。明示的な結合でより完全な構文を使用すると、何が起こっているのかを理解しやすくなります。したがって、あなたの例では、次のようなものです:

SELECT *
FROM locations AS loc
INNER JOIN items AS i
ON loc.l_id = i.item_loc
WHERE loc.l_id IN (value1,value2,...)
于 2013-04-12T09:52:28.920 に答える
1

動作するはずです:

SELECT items.i_id, items.item_name, location.loc_name FROM items LEFT JOIN locations ON l_id =  items.item_loc
于 2013-04-12T09:52:29.953 に答える
0

l_id と item_loc は同じ属性であるため、両方のテーブルで内部結合を実行できます。

    select l.loc_name,i.item_name 
    from Items i inner join Locations l
    on i.item_loc=l.l_id

基本的に、共通の属性値 (ここでは item_loc と l_id) をマッピングすることで、両方のテーブルを結合します。属性 (i_id、item_name、item_loc、loc_name) を持つ別のテーブルを取得します。

于 2013-04-12T09:59:25.620 に答える