使用INNER JOIN获取类别名称

时间:2013-03-26 16:26:32

标签: inner-join

我有一个返回项目详细信息的查询。它属于某一类别;因此我将ITEMS表链接到CATEGORIES表,并将外键保存到ITEMS表中。

现在,我希望任何选定项目的详细信息也显示类别名称而不是外键。我已经按照以下方式尝试了INNER JOIN,但令人惊讶的是查询仍然显示了一个外键。

这是我的问题:

/* Create the prepared statement */
if ($stmt = $mysqli->prepare("SELECT categories.category AS category, 
                                     items.id, 
                                     items.name, 
                                     items.description 
                              FROM items
                              INNER JOIN categories
                                    ON categories.cat_id = items.cat_id
                              WHERE items.id='$id'")) { 

    /* Execute the prepared Statement */
    $stmt->execute();

    /* Bind results to variables */
    $stmt->bind_result($id,$category,$name,$description);

    /* fetch values */
    while ($rows = $stmt->fetch()) {
        ...
    }
...
}

输出类别名称:

<?php  
echo $category;
?>

这里可能缺少什么?

3 个答案:

答案 0 :(得分:1)

您的绑定顺序错误,应该是:

$stmt->bind_result($category, $id, $name, $description);

您在SELECT子句中的顺序很重要,因此bind_result可以确定哪个列与变量绑定。

答案 1 :(得分:0)

您似乎将3个项目(从您的选择中)提取到4个变量,我认为这不是很好。

答案 2 :(得分:0)

这是我的元素之外的方法,但没有人回答它,所以我想我会开枪。

是否因为您在查询中选择了3个项目...类别,ID,描述

然后,当您绑定变量时,您将绑定4 ... $ id,$ category,$ name,$ description

所以也许正在发生的事情是变量$ id实际上是类别,而$ category实际上是id(这就是你所看到的)