php - 选择和浏览存储在单独表中的类别和子类别

标签 php mysql database-design mod-rewrite categories

当您将类别级别存储在单独的表中时,我正在寻找一种解决方案来列出和浏览类别和子类别及其记录(分类广告)。过去我使用过邻接模型,但现在我必须坚持使用这个数据库设置,这对我来说是新的。我正在使用 php 和 mysql。

该网站是一个分类广告网站,其结构采用常见的方式:它的主页上有主要类别列表,当您单击其中一个类别链接时,只会列出其子类别以及属于该类别的广告,等等在每个级别上。

我在以下方面有点困惑:

  1. 你如何构建 浏览时的类别链接 类别以便脚本知道它应该从哪个表中选择类别,如果我考虑以下内容 mysql结构?我需要分开吗 我访问的每个类别级别的参数 例如:“mysite.com/?cat2=4” 访问 cat2 中的类别“4” 表和“mysite.com/?cat3=9”时 访问 cat3 表中的类别“9” 为了识别类别 水平?如果没有单独的参数 需要,那么php和mysql怎么可以 告诉你必须选择哪个表 类别来自?

  2. 大多数 在这种情况下重要的是,什么是 构建SEO的最佳方式 友情链接? mysql怎么会知道 哪个表选择类别 从?我最想用 可能的最简单的解决方案 喜欢: mysite.com/electronics/television/sony。 据我所知,我必须包括 至少是 cat_id 链接中的某处...我应该把它放在哪里?我还必须包括级别数吗?至 使类别更加复杂 名字是外文的 重音字符(虽然我 创建了一个改变的函数 重音字符变成拉丁字符 生成类别时即时 链接)所以我认为最好 通过 ID 选择它们。

  3. 示例 mysql select 看起来如何 那样选择 child 某个类别的类别?

  4. 如何构建面包屑 导航?

MYSQL 结构:

  • 表“cat1”(主要类别):

    cat1_id | cat1_name

  • 表“cat2”(子类别):

    cat2_id | cat1_id | cat2_name

  • 表“cat3”(子类别):

    cat3_id | cat2_id | cat3_name

  • 表“广告”:

    ad_id | cat1_id | cat2_id | cat3_id |广告标题 |广告描述

感谢并抱歉发了这么长的帖子。

最佳答案

我最喜欢的类别(和标签)URL 模式:

http://mysite.com/articles/brains+zombies+legs+frogs

+ 符号对标签很好,对蜘蛛(和 SEO)也很友好。使用类别文本对蜘蛛和人类都很重要,因为它很有意义。

至于 SQL,我建议为任何带有类别或标签的内容使用 2 个表:

Categories (id, name, description)

CategoryRelationships (catID, thingID)

对于任何给定的事物,您都可以通过类别关系将类别加入事物。例如:

SELECT * FROM Things t
JOIN CategoryRelationships ON thingID = t.ID
JOIN Categories c ON catID = c.CatID

结果将是事物及其类别的列表,其中每个类别只有一个定义,以及通过关系表指向类别的一堆链接。

至于面包屑,它们是一个稍微不同的问题。面包屑:

  • 在您的站点层次结构中提供导航,或者
  • 帮助用户追溯他们的步骤

根据您瞄准的面包屑导航类型,您可以采用不同的方法。对于一个简单的站点层次结构的面包屑集,您可以简单地解析 URL 和 foreach 在这组段上:

http://mysite.com/people/zombies/brains/brains

解析 URI 会导致:

people, zombies, brains, brains

您将为其生成指向每个分割的链接。

关于php - 选择和浏览存储在单独表中的类别和子类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4739512/

相关文章:

php - 隐藏显示基于使用 jquery 选择的多个 div

php - 尝试从mysql数据库显示表时出错

php - Google 新闻 - 网址方案和主键

MySQL 隔离级别可重复读取和更新中的原子增量

sql - 直接加入或存储

javascript - 扩展javascript按键功能

php - AngularJS、PHP 和 Mysqli

php - 在刷新页面之前,MySql 数据不会显示在 html 表单上

mysql - 在 MySQL 中存储物理尺寸

sql - 将sql ddl文件上传到postgresql数据库