我有一个从 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/