Mysql запрос - выбор наивысшего ранга / упорядоченного предмета в таблице (объединение) - PullRequest
1 голос
/ 08 декабря 2011

Сценарий:

У нас 5 пользователей.(таблица пользователей) Каждый пользователь имеет до 10 изображений.(таблица изображений) Эти 10 изображений можно заказать 1 - 10. (таблица изображений) Каждый img может быть перечислен в нескольких категориях (скажем, есть 5 категорий - птицы, пчелы, кролики, мозги, белуги (таблица категорий, подключенная к таблице img черезтаблица, в которой хранятся img_ids и category_ids)

При поиске по категориям, скажем, кто-то выбирает пчел. При поиске должны быть найдены изображения в той категории, которая указана как CLOSEST для img # 1 для всех пользователей.имеет 3 изображения в категории пчел, упорядоченные как числа 4, 7 и 9, поиск должен показывать 4-е как самое близкое к числу 1.

Результаты, которые я продолжаю получать, повсеместны и почти кажутсякак будто выбирает изображения через КОГДА они были добавлены в БД.

SELECT i.img_name, i.ordered, a.user_name, c.keyword, c.cat_id
FROM images AS i JOIN artists AS a USING (user_id) 
JOIN img_cat_table AS im USING ( img_id )
JOIN catkeys AS c USING (cat_id)
WHERE ( cat_id = 3) // THE BEES ID # 
    GROUP BY user_id ORDER BY user_name DESC

Ответы [ 3 ]

1 голос
/ 08 декабря 2011

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

SELECT i.img_name, i.ordered, a.user_name, c.keyword, c.cat_id
FROM images AS i JOIN artists AS a USING (user_id) 
JOIN img_cat_table AS im USING ( img_id )
JOIN catkeys AS c USING (cat_id)
JOIN (
SELECT user_id, min(img_rank) img_rank
FROM images AS i 
JOIN artists AS a on i.user_id = a.user_id
JOIN img_cat_table AS im on im.img_id = i.img_id
JOIN catkeys AS c on c.cat_id = i.cat_id
WHERE ( cat_id = 3) ) x on x.user_id = a.user_id and x.img_rank = img_rank
WHERE c.cat_id = 3

Я не уверен, какое имя столбцасодержит рейтинг изображения.Я назвал это img_rank.Надеюсь, это даст вам идею

1 голос
/ 08 декабря 2011

хотя, если вы можете опубликовать структуру таблицы и данные, это будет здорово, но вот что я пробовал

SELECT i.img_name, i.ordered, a.user_name, c.keyword, c.cat_id
from (
select img_name, ordered, img_id, user_id from 
images 
group by user_id
order by user_img ) as i
JOIN artists AS a USING (user_id) 
JOIN img_cat_table AS im USING ( img_id )
JOIN catkeys AS c USING (cat_id)
WHERE ( cat_id = 3) // THE BEES ID # 
0 голосов
/ 08 декабря 2011

Попробуйте удалить DESC из предложения ORDER BY.

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