PHP选择类别和计数

时间:2016-08-09 14:26:43

标签: php mysql sql categories

表类别:

id, name,    
-------------
1   category1
2   category2
3   category3
4   category4

表格帖子:

id, category, title
--------------------
1   1, 3      title1
2   4, 2      title2
3   1, 4      title3

我想在这个类别中有一个节目类别和计数器帖子。在表格的类别列中,我列出了类别的ID,用“,”分隔。如果类别=类别ID并使用最少的SQL查询显示计数器,则搜索如何执行此操作。

1 个答案:

答案 0 :(得分:4)

您应修复数据结构,使每个帖子和类别都有一行。以逗号分隔的列表存储数据的SQLish方式有很多原因。您应该将其更改为联结表。

以下是一些原因:

  • 数字应存储为数字而不是字符串。
  • 应正确定义外键关系,并且不能使用字符串表示数字。
  • 属性应包含一个值。
  • MySQL对字符串处理功能没有很好的支持。
  • 无法使用索引优化使用该列的查询。

您应该有一个名为PostCategories的表格来获取此信息。

有时候,我们会遇到其他人不好的设计决定。如果是这样,您可以使用如下查询:

select c.id, count(*)
from posts p join
     categories c
     on find_in_set(c.id, replace(p.category)) > 0
group by c.id;