2013-03-09 43 views
1

我正在尝试使用MySQL表添加面包屑到我的网站,而此刻我很困难。抓取MySQL中的单个元素表

我有一个名为'includes'的表创建,它存储有关页面的类别,页面,子页面,标题和ref(url)的信息。类别,页和子页是从用户的页面传递

所有的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表,或者可能是一个完全不同的方法?

+1

你组织这个表的想法是错误的。您需要创建一个分层表,使用上级条目标识作为下级条目的父级标识 – 2013-03-09 07:20:36

回答

1

您可以作出这样

id | parent_it | title | Ref 

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

一个self relation表,以便您的查询应该得到的最后一个元素 SELECT * FROM includes WHERE tilte ='Blah'

然后得到父母的ID标题等等,就像这个表格结构会更好从我的角度来看&体验

OR

基于你的价值观,用简单的循环计数的参数,并基于该生成查询的查询字符串,然后执行它

我希望这能帮助:)

+0

这实际上很有意义。 我还是MySQL的新手,所以我甚至都没有想过这种方式;我会尽力实现这一点。 有什么办法可以做出一个可以返回所有父ID的查询,或者这是一系列查询吗? – Bitwize 2013-03-09 07:46:11