我是"类别"我的mysql数据库上有三列的表:category_id,parent_category_id,category_name。 category_id是PK和自动增量,parent_category_id包含类别的父级" categori_id"。所以我可以只在一个表中关联类别。
例如:
category_id parent_category_id category_name
1 0 USA
2 1 California
3 2 San Francisco
4 0 Canada
5 4 Alberta
6 5 Calgary
我希望在一个查询中获得一个类别及其所有父项。这个查询应该给我一个结果:
USA > California > San Francisco
或
Canada > Alberta > Calgary
Opencart实际上做了类似的事情但是它将关系数据存储在不同表中的类别之间。我想在一张桌子上做这件事,我不知道该怎么做。
答案 0 :(得分:-1)
只需1个简单查询(SELECT * FROM categories)和递归函数即可解决。
忍受我。自己运行PHP代码,检查,确认结果。
//To begin set a category_id, say our node is San Fransisco, so $category_id=3
//get San Fransisco's id
$node = 3
/* Get your database into array structure like this
$categories = array(
'1'=>array('parent'=>'0', 'name'=>'USA'),
'2'=>array('parent'=>'1', 'name'=>'California')
..
)
*/
$categories = array(); //or [] as of PHP 5.6
$qr = mysql_query('SELECT * FROM categories');
while($row=mysql_fetch_assoc($qr))
{
$categories[$row['category_id']] = array('parent'=>$row['parent_category_id'], 'name'=>$row['category_name']);
}
//first element of tree, is San Fransisco, category_id=3
$tree=array($node);
function getCategoryTree($node, & $tree){
global $categories;
if($categories[$node]['parent']==='0')
return;
$parent_id = $categories[$node]['parent'];
$tree[]=$parent_id;
return getCategoryTree($parent_id, $tree);
}
//do magick
getCategoryTree($node, $tree);
//now you have $tree=array(3,2,1);
$out='';
while($last = array_pop($tree))
{
$out.= $categories[$last]['name'].' > ';
}
//outputs USA > California > San Francisco
echo $out;