我需要使用mysql提取25条记录,其中前9条必须基于从200条最受赞赏的条目中的likes
count(随机选择)的降序,并从其余条目中随机平衡16条(不包括9条,已经过滤)。是否可以使用单个mysql查询来完成此操作?任何帮助都将不胜感激。
以下是我的疑问...
(SELECT*FROM(SELECT tiles.,users.first_name,users.last_name,users.mosaicname,users.country,users.city,users.state,users.profile_image,COUNT(tile_remissiations.tile_id)AS remissiation_count FROMtile_remissions.LEFT JOIN
tile_remissions
上的tile_remissions
。tile_remissions
上的tile_remissions
上的tile_remissions
上的/code>ON
=user_settings
。user_id
=tiles
。view_mode
=“pb”和用户
。status
=“y”和tiles
。moved_stat
=“1”和user_settings
。public_profile
=“y”组按tiles
。id
顺序按赞赏_COUNT
DESC LIMIT 200)作为t1顺序按RAND()LIMIT 9)UNION ALL(选择tiles.、users.first_name、users.last_name,users.mosaicname,users.country,users.city,users.state,users.profile_image,COUNT(tile_remissions.tile_id)作为remission_count从tile_remissions
上的tile_remissions
左联接tile_remissions
。tile_id
=tile
上的tile_remissions
。id
内部联接用户
。id
上的用户
。id
=tiles
。user_id
WHEREtiles
。view_mode
=“pb”和用户
。status
=“y”和tiles
。moved_stat
=“1”和user_settings
。public_profile
=“y”按tiles
分组。id
按RAND()LIMIT 16排序)
我不知道使用union all
是不是一个硬性要求,但是SQL已经有了一个非常好的系统,用于在第二个查询中从第一个查询中过滤出结果:它被称为union
。你可以选择剩下的16个,取其中最好的200个中的9个和整套25个中的25个的并集,然后将总成绩限制在25个。我在这里假设union
将从第二个集合中删除重复项,而不是从第一个集合中删除重复项。
试试这样的方法:
SELECT * FROM (
SELECT * FROM (
SELECT tiles.*,users.first_name,users.last_name, users.mosaicname,users.country,users.city,users.state,users.profile_image,COUNT(tile_appreciations.tile_id) AS appreciation_count
FROM tiles LEFT JOIN tile_appreciations ON tile_appreciations.tile_id = tiles.id INNER JOIN users ON users.id = tiles.user_id LEFT JOIN user_settings ON user_settings.user_id = tiles.user_id
WHERE tiles.view_mode = 'PB' AND users.status = 'Y' AND tiles.moved_stat = '1' AND user_settings.public_profile = 'Y'
GROUP BY tiles.id
ORDER BY appreciation_count DESC LIMIT 200
) as best200
ORDER BY RAND()
LIMIT 9
) UNION (
SELECT tiles.*,users.first_name,users.last_name,users.mosaicname,users.country,users.city,users.state,users.profile_image,COUNT(tile_appreciations.tile_id) AS appreciation_count
FROM tiles LEFT JOIN tile_appreciations ON tile_appreciations.tile_id = tiles.id INNER JOIN users ON users.id = tiles.user_id LEFT JOIN user_settings ON user_settings.user_id = tiles.user_id
WHERE tiles.view_mode = 'PB' AND users.status = 'Y' AND tiles.moved_stat = '1' AND user_settings.public_profile = 'Y'
GROUP BY tiles.id
ORDER BY RAND()
LIMIT 25
)
LIMIT 25;
问题内容: 我正在尝试将其编译。.我有一个带有firstname和lastname字段的表,并且我有一个字符串,例如“ Bob Jones”或“ Bob Michael Jones”等。 事实是,例如我姓鲍勃,姓迈克尔·琼斯 所以我想 但是它说未知列“ firstlast” ..有人可以帮助吗? 问题答案: 您提供的别名用于查询的输出-它们本身在查询中不可用。 您可以重复表达: 或包装查询
问题内容: 我有两个这样的表,两个都是单独的表 另一个表包含以下结构 我需要从表II中选择AccountNo或TempAccountNo,Mycolumn,条件是 我需要选择 我需要选择 我该如何实现。 问题答案:
问题内容: 是否有更好的方法从MySQL表中获取多个“前X个”结果?当不同的 foo 的数量很少时,我可以通过联合轻松地完成此操作: 我显然可以继续为foo的每个值添加联合。但是,当foo有500多个不同的值并且我需要每个值的前X个时,这是不切实际的。 问题答案: 这种查询可以用“每组最大n”来表述,您希望每个“组”的前10个得分为“ foo”。 我建议您看一下这个链接,它很好地处理了这个问题,从
问题内容: 对于保存用户网页访问行为记录的表,如何选择访问多个网页的用户。 该表的结构为: 我可以使用以下方法计数: 它给我的结果是: 我该如何执行查询,使我得到最终结果,例如: 每个都是访问多个DISTINCT网页的用户 问题答案: 只需添加having子句 但是如果你只是 SQLFiddle演示 之所以筛选on子句而不是on的原因是因为,子句不能支持 聚集了的 列。
问题内容: 我有一个名为“工作”的表。对于特定用户,作业可以是活动的,已归档的,过期的,待处理的或已关闭的。现在,每个页面请求都生成5个COUNT查询,为了进行优化,我试图将其减少为单个查询。到目前为止,这是我所拥有的,但这仅比5个单独的查询要快。请注意,我已经简化了每个子查询的条件,以使其更易于理解,但是完整查询的行为相同。 有没有一种方法可以在不使用无效子查询的情况下在同一查询中获得这5个计数
问题内容: 我试图从看起来像这样的数据库表结果中选择前2条记录 我试过这个查询 但是有些主题,例如失踪的地方,我什至尝试了以下链接的建议 如何选择每个组的前N行? 但是我为每个受检者得到两个以上 我究竟做错了什么? 问题答案: 您可以使用相关的子查询: 该查询通过串联三列来构造单列主键。如果您有真正的主键(如),则可以用代替。 SQL Fiddle中的示例。