我试图获取不同的类别名称,并使用PHP从mysql数据库中获取与每个类别名称相关的所有子类别。
所以我需要它看起来像这样:
Cat1
sub_cat1
sub_cat2
sub_cat3
Cat2
sub_cat1
sub_cat2
Cat3
sub_cat1
sub_cat2
sub_cat3
sub_cat4
这是我的代码:
$subs = "";
$header_list = "";
$sql2 ="SELECT * FROM sub_cats GROUP BY cat_name";
$query2 = mysqli_query($db_conx, $sql2);
$productCount = mysqli_num_rows($query2); // count the output amount
if ($productCount > 0) {
while($row = mysqli_fetch_array($query2, MYSQLI_ASSOC)){
$scid = $row["id"];
$scat_name = $row["cat_name"];
$scsub_cat_name = $row["sub_cat_name"];
foreach ((array) $scsub_cat_name as $item) {
$subs .='<li>
<a href="printing-products/standard-business-cards-range25d3.html?productTypeId=3#?pt=3&lt=1&ps=57&pat=4&prt=1">'.$scsub_cat_name.' <i class="fa fa-angle-double-right pull-right"></i></a>
</li>';
}
$header_list .= '<li class="product-types">
<span class="heading">'.$scat_name.'</span>
<ul class="product-options">
'.$subs.'
</ul>
</li>';
/*foreach ((array) $cat_name as $item) {}*/
}
} else {
$header_list = "";
}
echo $header_list ;
我面临的问题是它会正确地获得不同的类别,但它不会正确地获得与每个类别相关的子类别,并且会将它们置于不同的类别下!
所有类别和子类别都存储在mysql数据库的同一个表中,如下所示:
id cat_name sub_cat_name
1 cat1 subcat1
2 cat1 subcat2
3 cat1 subcat3
4 cat2 subcat1
5 cat2 subcat2
etc etc.....
有人可以就此问题提出建议吗?
任何帮助都将不胜感激。
编辑:
这就是我所做的,我在mysql数据库中创建了第三个表table_cat_sub_cat
:
$sql2 ="SELECT catgories.cat_name, sub_cats.sub_cat_name
FROM catgories
INNER JOIN table_cat_sub_cat ON catgories.id=table_cat_sub_cat.cat_id
INNER JOIN sub_cats ON table_cat_sub_cat.sub_cat_id = sub_cats.id";
$query2 = mysqli_query($db_conx, $sql2);
$productCount = mysqli_num_rows($query2); // count the output amount
if ($productCount > 0) {
while($row = mysqli_fetch_array($query2, MYSQLI_ASSOC)){
//$scid = $row["id"];
$scat_name = $row["cat_name"];
$scsub_cat_name = $row["sub_cat_name"];
foreach ((array) $scsub_cat_name as $item) {
$subs .='<li>
<a href="printing-products/standard-business-cards-range25d3.html?productTypeId=3#?pt=3&lt=1&ps=57&pat=4&prt=1">'.$scsub_cat_name.' <i class="fa fa-angle-double-right pull-right"></i></a>
</li>';
}
$header_list .= '<li class="product-types">
<span class="heading">'.$scat_name.'</span>
<ul class="product-options">
'.$subs.'
</ul>
</li>';
但我仍然得到一些奇怪的输出,而子类别正在不相关的类别下!
答案 0 :(得分:3)
您可以创建3个表:categories
,subcategories
,connections
。在categories
category_id
和category_name
,subcategories
subcategory_id
subcategory_name
和connections
,connection_id
category_id
subcategory_id
1}},SELECT categories.category_name, subcategories.subcategory_name
FROM subcategories
INNER JOIN connections ON connections.subcategory_id = subcategories.subcategory_id
INNER JOIN categories ON categories.category_id = connections.category_id
,$query= mysql_query($conn, $yourQuery);
$results = array();
while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){
$cat_name = $row['cat_name'];
$subcat_name = $row['sub_cat_name'];
if(!isset($results[$cat_name])){
$results[$cat_name] = array();
}
$results[$cat_name][] = $subcat_name;
}
if(!empty($results)){
foreach($results as $category => $subcats){
echo $category . "\n";
foreach($subcats as $subcategory){
echo $subcategory . "\n";
}
}
}
。然后,您可以轻松修改所有类别中的一个子类别,您可以轻松地管理它们。
查询:
{{1}}
修改强>
不,不,没有作者。
{{1}}
我希望它能奏效。
答案 1 :(得分:0)
您必须在2个不同的表中分隔类别和子类别,以便许多类别可以与许多子类别相关
table_cat
id cat_name
1 cat1
2 cat2
3 cat3
....
table_sub_cat
id sub_cat_name
1 sub_cat1
2 sub_cat2
3 sub_cat3
....
table_cat_sub_cat
id_cat id_sub_cat
1 1
1 3
2 1
2 2
2 3
....
然后你可以
SELECT table_cat.cat_name, table_sub_cat.sub_cat_name
FROM table_cat
LEFT JOIN table_cat_sub_cat ON table_cat.id=table_cat_sub_cat.id_cat
INNER JOIN table_sub_cat ON table_cat_sub_cat.id_sub_cat = table_sub_cat.id;
答案 2 :(得分:0)
如果将来有人遇到同样的问题,这是正确的做法。
$db = new mysqli('localhost', );
if($db->connect_errno > 0){
die('Unable to connect to database [' . $db->connect_error . ']');
};
// Perform queries
$sql1 = 'select * from catgories';
$result1 = $db->query($sql1);
echo "<ul>";
foreach ($result1 as $menu)
{
echo "<li>".$menu["cat_name"];
echo "<ul>";
$menu_title = $menu["cat_name"];
$sql2 = 'SELECT
sub_cats.sub_cat_name
FROM
sub_cats
INNER JOIN catgories ON sub_cats.cat_name = catgories.cat_name
WHERE
catgories.cat_name = "'.$menu_title.'"';
$result2 = $db->query($sql2);
foreach ($result2 as $submenu)
{
echo "<li>".$submenu["sub_cat_name"]."</li>";
}
echo "</ul>";
echo "</li>";
}
echo "</ul>";
$db->close();