我正在尝试弄清楚如何让这段代码工作。基本上,我使用MySQL来获取包含多个值的关联数组。
示例数据库:数据库名称= Products
----------------------------------------------------------------.
| name | overcategory | category | subcategory |
| Talon | null | stud welding | capacitor discharge |
| cdss m3x40 | studs/bolts | cd-studs | stainless steel |
----------------------------------------------------------------.我用了SELECT name, overcategory, category, subcategory FROM Products WHERE 1 = 1;这个句子
在实际的数据库中有更多的条目,但它们与这个问题无关。
我想要在屏幕左侧以菜单形式输出的结果。
<nav>
<h1> "$overcategory" </h1>
<h2> "$category" </h2>
<h3> "$subcategory" </h3>
<a href = "">$productname </a>
<a href = "">$productname3 </a>
<h1> "$overcategory2" </h1>
<h2> "$category2" </h2>
<h3> "$subcategory2" </h3>
<a href = "">$productname2 </a>
</nav>我正在考虑通过创建一个多维数组来实现这一点,它看起来像这样:
$testArray = array(
''=>array(
'Boltsveiseapparater'=>array(
'Kondensator'=>array(
'Talon',
'LBS-75'
),
'Arc'=>array(
'LBH-410',
'LBH-800'
)
)
),
'Pinner/bolter'=>array(
'CD-pinner'=>array(
'rustfri'=>array(
'cdss m3x35',
'cdss m3x40'
),
'stål'=>array(
'cdms m3x35',
'cdms m6x35'
),
'Alu'=>array(
'cdal m3x10',
'cdal m8x80'
)
),
'Bossinger'=>array(
'Stål'=>array(
'M6x10 5x8',
'M5x12 4x10'
),
'Alu'=>array(
'M6x10 5x8',
'M5x12 4x10'
),
'Rustfri'=>array(
'M6x10 5x8',
'M5x12 4x10'
)
)
)
); 我不知道如何通过循环遍历结果来做到这一点。有没有办法做到这一点而不造成巨大的厄运呢?如果没有,有人能帮我破解这个难题吗?
提前谢谢你。BM。
发布于 2012-03-21 04:44:26
如果在SQL查询中对结果的每一列进行排序,则可以循环遍历每个结果,并将其与最后一项进行比较,然后根据该结果调整输出。
SELECT name, overcategory, category, subcategory FROM Products ORDER BY overcategory, category, subcategory, name;否则,这里有一种处理嵌套数组的方法:
<?php
echo "\n";
echo "<nav>\n";
foreach ($testArray as $overcategory_name => $category_data) {
echo "\t<h1>$overcategory_name</h1>\n";
foreach ($category_data as $category_name => $subcategory_data) {
echo "\t\t<h2>$category_name</h2>\n";
foreach ($subcategory_data as $subcategory_name => $product_name_data) {
echo "\t\t\t<h3>$subcategory_name</h3>\n";
foreach ($product_name_data as $product_name) {
echo "\t\t\t\t<a href = \"\">$product_name</a>\n";
}
}
}
}
echo "</nav>\n";发布于 2012-03-21 04:11:32
您可以让mysql对结果集进行排序:
SELECT name, overcategory, category, subcategory FROM Products ORDER BY overcategory,category,subcategory;然后,您可以简单地循环结果。每当overcategory,category,subcategory发生变化时,你都会输出一个新的标题。
发布于 2012-03-21 04:17:08
不如-
$res = mysql_query('SELECT name, overcategory, category, subcategory FROM Products WHERE 1 = 1 ORDER BY overcategory,category,subcategory, name;');
$aMenu = array();
while($row = mysql_fetch_assoc($res)) {
$aMenu[$row['overcategory']][$row['category']][$row['subcategory']][] = $row['name'];
}需要研究的一个更重要的问题是表结构。假设overcategory、category和子category是层次结构的一部分,那么您应该只存储产品所属的叶节点,并且应该将其存储为一个整数,该整数是categories(id, name, parent_id)表的FK。我倾向于选择产品目录的嵌套集合,但这取决于需求。
此外,在多个类别中表示单个产品是很常见的,在这种情况下,您需要将类别关系移动到连接表products_categories(product_id, category_id)中。
只是一点思考的食粮。
https://stackoverflow.com/questions/9794066
复制相似问题