0

これは私がテーブル名の写真で得たテーブルです:

photo_id   user_id
401           1     
403           1     
405           1 
407           2     
408           1     
409           2      
410           1     
411           3      
412           2          
413           2      
420           2      
423           2

現在クエリを使用しています

SELECT *
FROM photos
WHERE user_id
IN ( 1, 2 )
LIMIT 0 , 6

内部の IDINは、2 つだけでなく複数の値を持つことができます

私が得るものは

photo_id   user_id
401           1     
403           1     
405           1 
407           2     
408           1     
409           2     

各user_idに比例した値を持たない

私が欲しいのは、両方の UserId から等しい比率で値を取得することです。つまり、フェッチ制限が 6 の場合、1 と 3 つの値から存在する要素が 3 つ未満の場合は 3 つの値、または 2 から存在する要素が 3 つ未満の場合は 3 未満が必要です。

3 つのユーザー ID があり、取得制限が 6 の場合。3 つの ID はすべて、値が 2 の結果になります。

photo_id   user_id
401           1     
403           1     
405           1 
407           2     
409           2      
412           2     

複数のクエリで実行できます。しかし、単一のクエリでそれを行う方法はありますか?

4

1 に答える 1

1

次のことを検討してください...

DROP TABLE IF EXISTS photos;

CREATE TABLE photos
(photo_id   INT NOT NULL PRIMARY KEY
,user_id INT NOT NULL
);

INSERT INTO photos VALUES
(401           ,1),     
(403           ,1),     
(405           ,1),     
(407           ,2),     
(408           ,1),     
(409           ,2),     
(410           ,1),     
(411           ,3),     
(412           ,2),     
(413           ,2),     
(420           ,2),     
(423           ,2);

SELECT x.*
     , COUNT(*) rank 
  FROM photos x 
  JOIN photos y 
    ON y.user_id = x.user_id 
   AND y.photo_id <= x.photo_id 
 GROUP 
    BY x.photo_id
     , x.user_id 
 ORDER 
    BY user_id
     , rank;
+----------+---------+------+
| photo_id | user_id | rank |
+----------+---------+------+
|      401 |       1 |    1 |
|      403 |       1 |    2 |
|      405 |       1 |    3 |
|      408 |       1 |    4 |
|      410 |       1 |    5 |
|      407 |       2 |    1 |
|      409 |       2 |    2 |
|      412 |       2 |    3 |
|      413 |       2 |    4 |
|      420 |       2 |    5 |
|      423 |       2 |    6 |
|      411 |       3 |    1 |
+----------+---------+------+
于 2013-10-02T11:11:54.750 に答える