Получение названия категории с помощью ВНУТРЕННЕГО СОЕДИНЕНИЯ
У меня есть запрос, который возвращает детали элемента. Это товар относится к определенной категории; поэтому я связал таблицу 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 ответа
Это выход из моей стихии, но никто еще не ответил на это, поэтому я решил, что сделаю снимок.
Это потому, что вы выбираете 3 элемента в своем запросе... категория, идентификатор, описание
Затем, когда вы связываете переменные, вы связываете 4... $id, $category, $name, $description
Поэтому, возможно, переменная $ id на самом деле является категорией, а $ category - фактически идентификатором (именно это вы и видите).
Ваш обязательный порядок неверен, он должен быть:
$stmt->bind_result($category, $id, $name, $description);
Ваш заказ в предложении SELECT имеет значение, поэтому bind_result
может выяснить, какой столбец связывается с переменной.
Вы, кажется, выбираете 3 элемента (из вашего выбора) для 4 переменных, я не думаю, что это хорошо.