Mysql查询 - 在表格中选择最高排名/有序主题(加入)

时间:2011-12-08 17:17:08

标签: mysql sql

情景:

我们有5个用户。 (用户表) 每个用户最多有10个imgs。 (图像表) 这10张图片可以订购1 - 10.(图片表) 每个img可以列在多个类别中(比如有5个类别 - 鸟类,蜜蜂,兔子,大脑,白鲸(通过存储img_ids和category_ids的表连接到img表的类别表)

在搜索类别时,请说有人选择蜜蜂。搜索应该在所有用户的#1 img中找到列出CLOSEST的类别中的图像。因此,如果每个用户在蜜蜂类别中有3个图像,则按照数字4,7和0排序。 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 个答案:

答案 0 :(得分: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)
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 :(得分:1)

虽然如果你可以发布表结构和数据,这将是很好的但这是我尝试过的

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 # 

答案 2 :(得分:0)

尝试从ORDER BY子句中删除DESC。