Php MySQL:在select查询中获取多个值的部分值
这是我得到的带有表名照片的表:Php MySQL:在select查询中获取多个值的部分值,php,mysql,sql,select,Php,Mysql,Sql,Select,这是我得到的带有表名照片的表: photo_id user_id 401 1 403 1 405 1 407 2 408 1 409 2 410 1 411 3 412 2 413 2 4
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
中内的ID可以有多个值,而不仅仅是两个值
我得到的是
photo_id user_id
401 1
403 1
405 1
407 2
408 1
409 2
没有每个用户id的比例值
我想要的是从两个用户ID中获得相等比例的值。也就是说,如果取数限制为6,那么我需要3个值,如果1和3的元素少于3,那么我需要小于3的值;如果2的元素少于3,那么我需要小于3的值
如果有3个用户ID,取数限制为6;所有三个ID的结果值均为2
photo_id user_id
401 1
403 1
405 1
407 2
409 2
412 2
我可以在多个查询中完成它;但有没有办法在单个查询中实现这一点 考虑以下几点
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 |
+----------+---------+------+
如果存在照片,则删除表格;
创建桌面照片
(photo_id INT非空主键
,用户id INT不为空
);
在照片中插入值
(401 ,1),
(403 ,1),
(405 ,1),
(407 ,2),
(408 ,1),
(409 ,2),
(410 ,1),
(411 ,3),
(412 ,2),
(413 ,2),
(420 ,2),
(423 ,2);
选择x*
,COUNT(*)秩
从照片x
加入照片
在y.user\u id=x.user\u id上
谢谢你的照片;得到了答案;但只要稍作改动,就需要按级别、用户id排序;