情景:
我们有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
答案 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。