php - MySQL:在选择查询中获取多个值的比例值

标签 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      
420           2      
423           2

我当前正在使用查询

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

IN 内的 Id 可以有多个值,而不仅仅是两个

我得到的是

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

没有为每个 user_id 提供比例值

我想要的是从两个 UserId 中获取相等比例的值。也就是说,如果获取限制为 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 |
+----------+---------+------+

关于php - MySQL:在选择查询中获取多个值的比例值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19135411/

相关文章:

php - 我可以在 WAMP 服务器上运行 Angular 6 项目吗?

php - 使用 PHP、Zend 将表数据导出到 CSV

python - SQLAlchemy "default"与 "server_default"性能对比

mysql - 我是否正确规范了这张表?

mysql - 关于 varchar 数据类型的困惑

java - 将sql转换为hql

mysql - 我该如何解决这个语法错误?

javascript - HTML表单本地存储

php - MySQL 事务在 PHPMyAdmin 中运行时有效,但在从 PHP 文件运行时无效

mysql - 错误1093(HY000): You can't specify target table 'valeurs_actions' for update in FROM clause when deleting from Mysql database