1

我正在尝试使用 MySQL 表将面包屑添加到我的网站,但目前我遇到了困难。

我创建了一个名为“includes”的表,其中存储了有关页面的类别、页面、子页面、标题和 ref (url) 的信息。Category、Page 和 Subpage 都是从用户所在页面传递的 php 参数

我的桌子是这样布置的:

|----------------------------------------------------------------|
| ID |  Category  |  Page   |  Subpage  |  Title           | Ref |
|----------------------------------------------------------------|
| 0  |            |         |           | Home             | ... |
| 1  | Software   |         |           | Software         | ... |
| 2  | Software   | Desktop |           | Desktop Software | ... |
| 3  | Software   | Mobile  |           | Mobile Software  | ... |
| 4  | Software   | Desktop | Blah      | Blah Blah        | ... |
| ...
|----------------------------------------------------------------|

我正在尝试做的是进行查询,该查询将仅返回所需的步骤返回首页以获取面包屑。

换句话说,如果用户在“example.com/software/desktop/blah”上,查询将返回第 0、1、2 和 4 行。或者如果我在 /software/mobile 上,它只会返回行0,1 和 3。

我目前的尝试如下:

SELECT * FROM `includes` WHERE
`category` IS NULL     AND `page` IS NULL AND `subpage` IS NULL OR
`category`='$category' AND `page` IS NULL AND `subpage` IS NULL OR
`category`='$category' AND `page`='$page' AND `subpage` IS NULL OR
`category`='$category' AND `page`='$page' AND `subpage`='$subpage'

这不仅不起作用,而且看起来比它应该的更复杂。

我可能过于复杂了,或者可能只是做了一个完全错误的方法,这就是我转向这里的原因。

有人对此有可能的解决方案吗?我应该查看更复杂的查询吗?(诚​​然,SQL 不是我的强项)或者我应该查看一个新的 SQL 表,或者可能是一个完全不同的方法?

4

2 回答 2

2

你所拥有的是一个层次结构。数据设置有父子关系。这里有一个关于如何使用分层数据的很好的描述:http: //explainextended.com/2009/03/17/hierarchical-queries-in-mysql/

于 2013-03-09T07:22:11.363 回答
1

你可以做一个self relation这样的表

id | parent_it | title | Ref 

1  | 0         | Home  | ... 
2  | 1         | Software  | ... 
3  | 2         | Desktop  | ... 
4  | 2         | Mobile  | ... 
5  | 3         | Blah  | ... 

所以你的查询应该得到最后一个元素 SELECT * FROM includesWHERE tilte= 'Blah'

然后获取父ID标题等,从我的观点和经验来看,这样的表结构会更好

或者

根据您获得的值生成查询,使用简单的循环计数参数并基于该生成查询字符串然后执行它

我希望这可以帮助:)

于 2013-03-09T07:31:11.850 回答