Выберите столбцы из различных таблиц в MySQL - PullRequest
1 голос
/ 07 марта 2012

У меня есть динамический список категорий, который получен из mySQL.Когда пользователь нажимает на категорию, он загружает изображения для этой конкретной категории из БД.Это функция, которая делает это:

function getImages($categoryID)
{
return json_encode(select("SELECT * FROM images WHERE categoryID=$categoryID"));
}

Теперь я также хочу снова извлечь имя категории из таблицы «категории» (чтобы включить имя выбранной категории в другую часть страницы),Я пытался сделать это:

function getImages($categoryID)
{
return json_encode(select(
        "SELECT categories.categoryName, images.imageFileName, images.imageHeader 
        FROM images JOIN categories 
        ON categories.categoryID = images.categoryID 
        WHERE categoryID=$categoryID"));
}

, но это не сработало, теперь я даже не получаю изображения.

Как это можно сделать?

Ответы [ 4 ]

4 голосов
/ 07 марта 2012

В вашем предложении WHERE categoryID является неоднозначным.

WHERE categoryID=$categoryID

Поскольку у вас есть две таблицы с categoryID, вам необходимо определить, какую из них ГДЕ следует искать.* Чтобы облегчить себе жизнь, вы можете подумать о псевдониме таблиц, например:

SELECT c.categoryName, i.imageFileName, i.imageHeader 
FROM images i
JOIN categories c ON c.categoryID = i.categoryID 
WHERE c.categoryID=$categoryID

Кроме того, на каком языке вы разрабатываете?Если это веб-приложение, вы можете использовать экранирование $ categoryID для защиты от внедрения SQL.

4 голосов
/ 07 марта 2012

В запросе SQL есть ошибка, categoryID неоднозначен.Попробуйте:

SELECT 
    categories.categoryName, 
    images.imageFileName, 
    images.imageHeader 
FROM 
    images 
JOIN 
    categories on categories.categoryID = images.categoryID 
WHERE 
    categories.categoryID=$categoryID;
2 голосов
/ 07 марта 2012

Перефразируя то, что уже было сказано, попробуйте левое объединение, чтобы изображения, которые не классифицированы, не отфильтровывались и использовали экранирование, например следующее:

$query = "SELECT c.categoryName, i.imageFileName, i.imageHeader 
  FROM images i
LEFT JOIN categories c
  ON c.categoryID = i.categoryID 
WHERE c.categoryID= " . intval($categoryID) . ";"
1 голос
/ 07 марта 2012

Я думаю, что вы должны квалифицировать поле в вашем предложении WHERE с именем таблицы, т.е.

WHERE image.categoryID=$categoryID

Механизм обработки данных не знает, какое из двух полей categoryID вы имеете в виду. Если вы снова столкнетесь с подобными проблемами, вам следует проверить запрос в командной строке MySQL. Там вы получите сообщение об ошибке, которое очень полезно для исправления вашей ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...