PHP select 类别和计数
PHP select categories and count number
Table 类别:
id, name,
-------------
1 category1
2 category2
3 category3
4 category4
Table 个帖子:
id, category, title
--------------------
1 1, 3 title1
2 4, 2 title2
3 1, 4 title3
我想在这个类别中有一个展示类别和计数器帖子。在table个帖子的类别栏中,我是类别ID,用','分隔。当 category = category ID 并显示带有最少 SQL 个查询的计数器时,如何执行此操作。
您应该修正您的数据结构,使每个 post 和类别各占一行。出于多种原因,逗号分隔列表 不是 一种类似 SQL 的数据存储方式。您应该将其更改为连接点 table.
原因如下:
- 数字应存储为数字而不是字符串。
- 应该正确定义外键关系,不能用字符串到数字来定义。
- 一个属性应该包含一个值。
- MySQL对字符串处理函数没有很好的支持。
- 无法使用索引优化使用列的查询。
您应该有一个名为 PostCategories
的 table 来获取此信息。
有时,我们会被其他人糟糕的设计决策所困。如果是这样,您可以使用如下查询:
select c.id, count(*)
from posts p join
categories c
on find_in_set(c.id, replace(p.category)) > 0
group by c.id;
Table 类别:
id, name,
-------------
1 category1
2 category2
3 category3
4 category4
Table 个帖子:
id, category, title
--------------------
1 1, 3 title1
2 4, 2 title2
3 1, 4 title3
我想在这个类别中有一个展示类别和计数器帖子。在table个帖子的类别栏中,我是类别ID,用','分隔。当 category = category ID 并显示带有最少 SQL 个查询的计数器时,如何执行此操作。
您应该修正您的数据结构,使每个 post 和类别各占一行。出于多种原因,逗号分隔列表 不是 一种类似 SQL 的数据存储方式。您应该将其更改为连接点 table.
原因如下:
- 数字应存储为数字而不是字符串。
- 应该正确定义外键关系,不能用字符串到数字来定义。
- 一个属性应该包含一个值。
- MySQL对字符串处理函数没有很好的支持。
- 无法使用索引优化使用列的查询。
您应该有一个名为 PostCategories
的 table 来获取此信息。
有时,我们会被其他人糟糕的设计决策所困。如果是这样,您可以使用如下查询:
select c.id, count(*)
from posts p join
categories c
on find_in_set(c.id, replace(p.category)) > 0
group by c.id;