-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_timecuisine. 而不是在我执行查询时显示 time= 6 和 Category 3,而是希望它显示 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

如果一道菜可能在 、 和 上具有可为的值category,请使用代替。基本上, 在您加入的表上显示至少有一个匹配项的行,而即使在另一个表上没有行也显示。cuisinet_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 回答