2011-12-08 7 views
1

シナリオ:Mysqlのクエリ - テーブル内の最上位/順序付きサブジェクトの選択

私たちは5人のユーザーがいます。 (ユーザーテーブル) 各ユーザーには最大10個のimgがあります。 (イメージテーブル) これらの10個のイメージは、1 - 10の順序で並べ替えることができます。(イメージテーブル) 各imgは、複数のカテゴリ(鳥、蜂、バニー、脳、ベルガテーブル経由でimg_idsとcategory_idsを格納するテーブル)

カテゴリを検索すると、誰かが蜂を選んだとします。そのカテゴリの画像は、すべてのユーザの#1 imgにCLOSESTで検索されます。ミツバチのカテゴリーに3つの画像があり、数字4,7,9の順で検索されます。

私が得ている結果はどこにでもあり、ほとんどそれのようですis ch彼らはDBに追加されたときにイメージをoosing。

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

を試してみましたhavedものですすなわち(画像の使用者のランキングを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のトップの1つだけを引っ張って探します。 (意味をなさないことを望みます) –

+0

ええ、上記のようなサブクエリが必要です。私は自分の答えを編集してより明確にした – jmacinnes

0

ORDER BY句からDESCを削除してみます。

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 # 
関連する問題