-2

私は次のテーブルを持っています ここに画像の説明を入力してください 料理テーブル:

ここに画像の説明を入力してください

カテゴリ表: ここに画像の説明を入力してください

t_timeテーブル: ここに画像の説明を入力してください

料理と材料をつなぐために、次のコードが機能します。

$sql = "SELECT d.name, i.item\n"
    . "FROM dish d\n"
    . "JOIN dish_ingredients di ON ( d.id = di.dish_id )\n"
    . "JOIN ingredients i ON ( di.ingredient_id = i.id )\n"
    . "WHERE d.id =1\n"
    . "LIMIT 0 , 30";

categoriesしかし今、私は皿を一致する/t_timeとに接続したいと思いcuisineます。クエリを実行するときにtime=6とCategory3を表示する代わりに、60とfishを表示したいと思います。これを行う最も簡単な方法は何でしょうか?良いチュートリアルも役立つかもしれません。

4

3 に答える 3

2

あなたがしているのと同じようにテーブルに参加するだけです。

SELECT  d.name, i.item,
        c.category,
        e.cuisine,
        f.t_time
FROM    dish d
        INNER JOIN dish_ingredients di ON ( d.id = di.dish_id )
        INNER JOIN ingredients i ON ( di.ingredient_id = i.id )
        INNER JOIN categories c ON (d.category = c.id)
        INNER JOIN cuisine e ON d.cuisine = e.id
        INNER JOIN t_time f ON d.time = f.id
WHERE   d.id =1
-- LIMIT 0 , 30

ディッシュが、、およびでnull 許容値を持つ可能性がある場合は、代わりに を使用します。基本的に、 結合したテーブルに少なくとも 1 つの一致がある行を表示し、他のテーブルに行がない場合でも を表示します。categorycuisinet_timeLEFT JOININNER JOININNER JOINLEFT JOIN

于 2012-11-02T06:11:09.480 に答える
0

これを試して:

SELECT d.name, i.item, cat.category, t.t_time, cu.cuisine
FROM dish d
INNER JOIN dish_ingredients di ON d.id = di.dish_id
INNER JOIN ingredients i ON di.ingredient_id = i.id
INNER JOIN category cat ON d.category = cat.id
INNER JOIN cuisine cu ON d.cuisine = cu.id
INNER JOIN t_time t ON d.t_time = t.id
WHERE d.id = 1
于 2012-11-02T06:11:29.997 に答える
0
$sql = "SELECT d.name, i.item, c.category, t.t_time, cs.cuisine\n"
    . "FROM dishes d\n"
    . "JOIN dish_ingredients di ON ( d.id = di.dish_id )\n"
    . "JOIN ingredients i ON ( di.ingredient_id = i.id )\n"
    . "LEFT JOIN category c ON ( c.id = d.category )\n"
    . "LEFT JOIN t_time t ON ( t.id = d.t_time )\n"
    . "LEFT JOIN cuisine cs ON ( cs.id = d.cuisine)\n"
    . "WHERE d.id =1\n"
    . "LIMIT 0 , 30";

LEFT JOIN を使用してテーブルに結合してみてください。カテゴリ、t_time、料理があれば表示されます。

于 2012-11-02T06:12:35.080 に答える