【问题标题】:Saving queries and optimizing a database保存查询和优化数据库
【发布时间】:2012-02-12 09:37:37
【问题描述】:

我正在创建一个脚本,旨在通过选择一个类别、子类别和另一个子类别或选择全部来查询帖子列表。

问题是,当我想显示“所有”帖子时,我需要为每个帖子创建 3 个查询(将类别编号转换为名称)。

有没有办法让它更优化?

表格结构:

帖子:

  • id (int)
  • main_cat(主要类别)(int)
  • sub_cat(子类别)(int)
  • sub_sub_cat(子到子)(int)
  • 描述(varchar)

main_cat:

  • id (int)
  • 名称(varchar)

sub_cat:

  • id (int)
  • relation (int)(main_cat 的 id)
  • 名称(varchar)

sub_sub_cat:

  • id (int)
  • relation (int)(sub_cat 的 id)
  • 名称(varchar)

提前致谢。

【问题讨论】:

  • 您是否尝试在查询中使用联接
  • 不确定加入? (安静的新手)
  • 到目前为止你有什么?
  • 目前我知道的唯一方法是查询每个帖子,然后获取类别编号并查询他们的表以获取名称。
  • 如果我认为您想要查询以获取具有相应类别名称的帖子名称,我是否理解您的错误?

标签: mysql


【解决方案1】:

我将从阅读 JOIN 开始解决您的问题:http://mysqljoin.com/joins/inner-join-tutorial/

一旦你理解了这个概念,你的问题就会自行解决。

不提供任何解决方案代码,因为这个问题看起来像是一个家庭作业。

【讨论】:

  • 我还建议在LEFT JOIN上阅读一些内容
  • 是的,这是作者需要理解的第二件事 -)
【解决方案2】:

而是获取所有类别名称、id 并将它们存储到一个数组中。像 [id]=>category_name。
和其他查询来获取父子,使用连接。

【讨论】:

    【解决方案3】:

    类似:

    SELECT posts.description, main_cat.name AS cat_name, sub_cat.name AS sub_name, sub_sub_cat.name AS sub_sub_name FROM posts LEFT JOIN main_cat ON main_cat.id=posts.main_cat LEFT JOIN sub_cat ON sub_cat.id=posts.sub_cat LEFT JOIN sub_sub_cat ON sub_sub_cat.id=posts.sub_sub_cat
    

    会这样做,但这是未经测试的 - 如果有用,请将其标记为已接受 - 38% 的接受率不会为您提供太多帮助!

    如果您要使用数据库,了解 JOIN 和 LEFT JOIN 非常有用!

    【讨论】:

    • 我尝试解决的方法有一个问题。目前只有 1 个帖子,虽然同一个关系有 2 个子类别,但会发生两次相同的帖子,只是子类别不同
    • 应该工作,因为它只会使用发布的帖子并加入该帖子所在的数据 - 如果您有多个类别(您没有说明),那么它不会做任何事情关于它们 - 但我会认为每个帖子都是独一无二的(否则你的帖子不是唯一的但有多个类别和子类别)。如果是这种情况,那么它要么是数据库设计,要么你需要做另一个查询,等等
    猜你喜欢
    • 2013-11-06
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多