mysql - 从同一个表的多个列中按计数排序
问题描述
所以,我在帖子表中有以下列:team_id、player_id、league_id、coach_id、venue_id。任何给定的帖子每列都可以有一堆id。
现在,我想按任何 id 的 DESC 计数排序。例如:结果应该是:
3 - League_id //因为它的计数总数为 3
7 - team_id // 因为它的计数总数为 2
8 - player_id //因为它的计数为 2 等等。
基本上,我们按计数 DESC 排序,但它必须来自相同的列数。
有什么办法可以得到吗?它还必须给我列名,以便我知道该列的 id。谢谢!
解决方案
适当的数据模型将为每个关系提供一个单独的联结/关联表:
post_teams
post_players
post_leagues
post_coaches
post_venues
这些中的每一个都将正确声明与两个引用表的外键关系。
使用这样的模型,您的查询实际上会非常简单:
select which, id, count(*)
from ((select post_id, team_id as id, 'team' as which
from post_teams
) union all
(select post_id, players_id as id, 'players' as which
from post_players
) union all
(select post_id, leagues_id as id, 'leagues' as which
from post_leagues
) union all
(select post_id, coach_id as id, 'coach' as which
from post_coaches
) union all
(select post_id, venue_id as id, 'venue' as which
from post_venues
)
) x
group by which, id
order by count(*) desc;
我建议您修复您的数据模型 - 或切换到对数组具有本机支持的数据库。MySQL 有一个很好的存储列表的方法。它被称为table,而不是 string。
推荐阅读
- java - 概括规则:哪些操作总是会导致 IOException?
- react-native-ios - 架构 armv7 的未定义符号:YGConfig
- image - 在python中绘制灰度图像直方图的问题
- jekyll - 如何默认隐藏所有页面[已发布:false]
- javascript - 缩放时如何使导航栏消失?
- google-sheets - 如何在 2 个不同的谷歌电子表格之间使用 vlookup?
- android - 无法实现正确的相机和视口
- ruby-on-rails - 如何在 Ruby on Rails 中从 link_to 调用 js?
- ios - Swift 迁移到 Swift 4.2 后的颜色变化
- node.js - 匹配多种文件类型的更漂亮的 glob