具有条件限制的 MYSQL 加入/联合

标签 mysql sql

在此查询中,我希望返回总共 x 条记录。在该查询中,我有几个子查询,我无法确定它们是否会返回最大记录数。如果一个结果小于它的最大限制,我想用下一个查询填充剩余的插槽,依此类推。我不能在 limit 子句中做数学运算,所以我仍在尝试弄清楚如何去做。如果在 limit 子句中可以使用数学,我会这样做。

select *
from 
(
(select * from profile where size='local' order by rand() limit 7) as local 
join 
(select * from profile where size='regional' order by rand() limit (13-count(local.id)) as regional
join 
(select * from profile where size='national' order by rand() limit (19-(count(local.id)+count(regional.id))) as national
join 
(select * from profile where size='international' order by rand() limit (25-(count(local.id)+count(regional.id)+count(national.id)))) as international    
)

最佳答案

我可能以一种不必要的复杂方式完成了此操作,但它似乎确实有效:-

SELECT id, size
FROM
(
    SELECT id, size, 
        @SeqLocal:=IF(size="local", IF(@SeqLocal <= 7, @SeqLocal + 1, @SeqLocal), @SeqLocal) AS SeqLocal,
        @SeqRegional:=IF(size="regional", IF(@SeqLocal + @SeqRegional <= 14, @SeqRegional + 1, @SeqRegional), @SeqRegional) AS SeqRegional,
        @SeqNational:=IF(size="national", IF(@SeqLocal + @SeqRegional + @SeqNational <= 21 , @SeqNational + 1, @SeqNational), @SeqNational) AS SeqNational,
        @SeqInternational:=IF(size="international", IF(@SeqLocal + @SeqRegional + @SeqNational + @SeqInternational <= 28, @SeqInternational + 1, @SeqInternational), @SeqInternational) AS SeqInternational
    FROM
    (
        select *
        from profile 
        where size IN ("local", "regional", "national", "international")
        order by FIELD(size, "local", "regional", "national", "international"), rand() 
    ) Sub1
    CROSS JOIN (SELECT @SeqLocal:=0, @SeqRegional:=0, @SeqNational:=0, @SeqInternational:=0) Sub2
) Sub3
WHERE (size = "local" AND SeqLocal != @SeqLocal)
OR  (size = "regional" AND SeqRegional != @SeqRegional)
OR  (size = "national" AND SeqNational != @SeqNational )
OR  (size = "international" AND SeqInternational != @SeqInternational)

SQLfiddle 在这里:-

http://www.sqlfiddle.com/#!2/cc3b884/14

关于具有条件限制的 MYSQL 加入/联合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19865800/

相关文章:

sql - 按 60 分钟滑动窗口分组

mysql - 我如何通过选择查询获取所有表

php - 显示没有产品详细信息的空白格式页面

php - 如何在 MySQL 或 PHP 中将 32 位整数从无符号转换为有符号?

mysql - 内爆数组 -> 检查字符 -> 插入数据库

c# - 命令队列

sql - 如何查找哪些表引用了 Oracle SQL Developer 中的给定表?

MySql FLOAT 数据类型和超过 7 位数的问题

php - 不止一步的foreach循环

sql - 我应该如何建模模型可以与 Django 中不同类型的实体相关的模式