2011-12-08 80 views
1

方案:Mysql查詢 - 在表中選擇最高排名/排序主題(加入)

我們有5個用戶。 (用戶表) 每個用戶最多有10個imgs。 (image table) 這10個圖像可以訂購1 - 10.(圖表) 每個img可以列在多個類別(比如說有5個類別 - 鳥類,蜜蜂,兔子,大腦,白鯨(類別表連接到img表通過存儲img_ids和category_ids的表格)

在搜索類別時,說某人選擇蜜蜂。搜索應該找到該類別中的圖像,該圖像被列在所有用戶的#1 img的CLOSEST中。有3個圖像的蜜蜂類別,訂購數字4,7 & 9,搜索應顯示第4個最接近數字1.

我一直得到的結果是遍佈整個地方,幾乎看起來像它是ch通過將它們添加到數據庫中時添加圖像。

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

是user_img圖像(即用戶的排名。你想排序的領域)? –

+0

你可以發表表格的輪廓嗎? – ben

+0

@馬克B - 對不起,這是一個錯字。它只是按用戶名(按字母順序)排序。 –

回答

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。希望這會給你的想法

+0

只有在每個用戶img的類別中尋找最頂級的。 (希望是有道理的) –

+0

是的,那麼你將需要一個像我上面寫的那個子查詢。我編輯了我的答案,使其更清晰 – jmacinnes

0

嘗試從您的ORDER BY子句中刪除DESC。

1

但如果你能發佈表結構和數據,這將是偉大的,但這裏是我haved試圖

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 #