Как отсортировать в динамически сгенерированный конкретный порядок в MySQL? - PullRequest
3 голосов
/ 25 мая 2009

Я бьюсь над этим, и я не прогрессирую. Я не очень хорошо разбираюсь в SQL, поэтому я надеюсь, что ответ - это нечто простое, чего я просто не знаю.

У меня есть 2 таблицы: одна называется "изображения", которая содержит данные, которые я хочу, с первичным ключом "imageID". Другой называется productPhotos и содержит два поля (плюс первичный ключ): imageID и productID. Таким образом, для данного продукта может быть несколько изображений, и данное изображение может использоваться для представления нескольких продуктов.

Пока все работает отлично, но тут возникает проблема. У меня есть динамически генерируемый список идентификаторов продуктов, и я хочу загрузить все изображения, которые представляют эти продукты. И я не только хочу их загружать, но я хочу, чтобы они были в порядке продуктов в моем списке.

Так что, если мой список продуктов "5,2,4", я хочу, чтобы мой список вывода состоял из сначала всех изображений для продукта 5, затем всех изображений для продукта 2, а затем всех изображений для продукта 4. Меня не особо волнует порядок в подгруппах.

Выбор правильных изображений довольно прост, но получить их в правильном порядке - отвратительно. Я понял, как получить идентификаторы изображений, которые я хочу, в правильном порядке, но на самом деле получение этих изображений без отдельного вызова MySQL до сих пор ускользало от меня. Я попытался создать временную таблицу, сохранить нужные идентификаторы в переменной @variable и множество различных вариантов ORDER BY FIELD () и ORDER BY FIND_IN_SET ().

Вот что у меня так далеко: ВЫБЕРИТЕ ИЗОБРАЖЕНИЕ ИЗ ПРОДУКТАФотографии, ГДЕ ИДЕНТИФИКАЦИЯ ПРОДУКТА В (5,2,4) ЗАКАЗАТЬ ПО ПОЛЕ (конкретныйПродукт, 5,2,4);

Это успешно возвращает набор идентификаторов изображений в правильном порядке, но я зашел в тупик, пытаясь получить оттуда данные для этих идентификаторов изображений из таблицы изображений. Я знаю, что я мог бы сделать это довольно легко, просто используя два отдельных вызова базы данных в PHP (один для получения идентификаторов изображений, а другой для загрузки изображений), но (я думаю) это означало бы значительный удар по производительности, и это просто должен быть лучший способ сделать это.

Заранее спасибо за любую помощь.

1 Ответ

3 голосов
/ 25 мая 2009
SELECT images.*
FROM images
INNER JOIN productPhotos ON images.imageID = productPhotos.imageID
WHERE productID in (5, 2, 4)
ORDER BY FIELD(specificProductUID, 5,2,4);
...