php - 使用 Mysql 和 PHP 统计类别列表中的帖子数量

标签 php mysql

我有一个从 MSSQL 转换而来的数据库。他们这样存储数据库:

  • tbl_item(id、 channel 、名称)
  • tbl_channels(id,名称)

示例:

  • 项目:“1”、“1,3,5”、“项目 A”
  • 项目:“2”、“1,2,6”、“项目 B”

  • channel :“1”、“ channel A”

  • channel :“2”、“ channel B”

如何计算 channel 中的项目数,我尝试使用“SELECT item WHERE Channels IN (1)”来计算 channel A 的项目数,但没有成功。

请帮助我! 谢谢

最佳答案

非常痛苦。您确实应该将数据库转换为具有 item_channels 连接表。每个项目和每个 channel 都有一行。将列表存储在字符串字段中是一个非常非常糟糕的主意。在数据库中存储列表的正确方法是使用表。

但有时,您会陷入困境。如果这是其中一种情况,请使用 find_in_set():

select count(*)
from tbl_items i
where find_in_set(1, i.channels) > 0;

然后,完成此操作后,开始修复数据库结构。

编辑:

如果您需要计算所有 channel :

select c.*, count(*)
from tbl_items i join
     tlb_channels c
     on find_in_set(c.id, i.channels) > 0
group by c.id;

那么希望你的数据库不要太大,因为性能可能会很差,而且你没有办法改进它(除了修复数据库结构)。

关于php - 使用 Mysql 和 PHP 统计类别列表中的帖子数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24533274/

相关文章:

php数组生成挑战

php - 在 PhP5 中,有没有办法获取我所有服务器的 IP 地址?

php - 安卓应用程序身份验证

php - 无法从 mysql 检索 id 到隐藏的输入元素中

mysql - 无法在 mariadb 中创建 FUNCTION

php - 多个记录 ID 的 Laravel 批量更新

php - 拒绝访问 - PHP move_uploaded_file - Ubuntu LAMP/var/www

php - 为什么 Chrome 不缓存我的动态表单字段?

java - Talend - 无法运行作业 - NoClassDefFoundError

mysql - 从查询 MySQL 中获取 Concat 函数中的本地化月份名称