Ash*_*Ash 2 php mysql select nested while-loop
我有一个包含类别列表的表,另一个表包含每个类别中的产品列表.
例如
CatID | Cat_Name
----------------
1 | Books
2 | CDs
Run Code Online (Sandbox Code Playgroud)
和
ProductID | Product_Name | CatID
------------------------------------
1 |The Bible | 1
2 |The Koran | 1
3 |90s Greatest Hits | 2
4 |80s Greatest Hits | 2
Run Code Online (Sandbox Code Playgroud)
我想做的就是得到
<ul>
<li>Books</li>
<ul>
<li>The Bible</li>
<li>The Koran</li>
</ul>
<li>Cds</li>
<ul>
<li>90s Greatest Hits </li>
<li>00s Greatest Hits </li>
</ul>
</ul>
Run Code Online (Sandbox Code Playgroud)
没做(PHP)
$query = mysql_query("SELECT ... FROM categories")
while($row = mysql_fetch_assoc($query)):
$query2 = mysql_query("SELECT ... FROM products WHERE catId = $row['CatId'])
endwhile;
Run Code Online (Sandbox Code Playgroud)
如何摆脱使用嵌套的while/SELECT语句,我可以使用一个查询高效地完成 - 以及如何使用PHP访问相关数据?
编辑:我的印象是,如果你的表变得非常大,多个SQL查询会使页面变慢,因此为了优化页面加载,你应该尝试减少查询次数?
使用JOIN选择所有产品和类别名称
select * from category c, products p where c.catID = p.catID order by p.catID
Run Code Online (Sandbox Code Playgroud)
获取和分组结果
$products_by_cat = array();
foreach(fetch(....) as $record)
$products_by_cat[$record->catName][] = $record;
Run Code Online (Sandbox Code Playgroud)
你会得到一个二维数组
[books] => array(bible, koran)
[CDs] => array(cd1, cd2, ....)
Run Code Online (Sandbox Code Playgroud)
输出此数组有两个嵌套循环
foreach($products_by_cat as $cat => $products)
<li> $cat <ul>
foreach($products as $p)
<li> $p->name </li>
</li></ul>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1373 次 |
| 最近记录: |