[英]PHP: Distinct categories and multiple subcategories?
我正在嘗試獲取不同的類別名稱,並使用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>';
但我仍然得到一些奇怪的輸出和子類別在不相關的類別下!
您可以創建3個表: categories
, subcategories
, connections
。 在categories
您具有category_id
和category_name
,在subcategories
category_name
,您具有subcategory_id
和subcategory_name
,在connections
您具有connection_id
, category_id
, subcategory_id
。 然后,您可以輕松修改所有類別中的一個子類別,您可以輕松地管理它們。
查詢:
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";
}
}
}
我希望它能奏效。
您必須在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;
如果任何人將來面臨同樣的問題,這是正確的方法。
$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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.