【问题标题】:PHP select categories and count numberPHP选择类别和计数
【发布时间】:2016-08-09 22:31:39
【问题描述】:

表格类别:

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 查询显示计数器。

【问题讨论】:

  • 修复您的数据结构以拥有一个适当的联结表,每个帖子和类别只有一行。
  • 不要使用 csv,特别是如果你想搜索。如果一行需要多个值,请创建一个新表,其中包含 id 和每个 category 的行。

标签: php mysql sql categories


【解决方案1】:

您应该将数据结构修复为每个帖子和类别有一行。出于多种原因,逗号分隔的列表不是一种用于存储数据的 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;

【讨论】:

猜你喜欢
  • 2015-07-22
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 2014-02-14
  • 1970-01-01
相关资源
最近更新 更多