您好我刚才问过一个类似的问题,但只是意识到我没有得到解决问题的答案。
我在MySQL DB中有2个表,它们通过相同的主id连接,下面的代码只是原始代码的简化示例:
table1:
+-----------------------+
| main_id | name | type |
+-----------------------+
表2:
+----------------------------------------+
| main_id | secondary_id | color | price |
+----------------------------------------+
我想要实现的结果是获取表1的每一行,并在每一个列表下,所有由table2的主要id行链接,例如:
table1行:
+-------------------+
| 1 | name1 | type1 |
| 2 | name2 | type2 |
| 3 | name3 | type3 |
+-------------------+
table2行:
+----+------+----------+------+
| 1 | 23 | red | 500 |
| 1 | 24 | blue | 600 |
| 1 | 25 | green | 700 |
| 2 | 26 | pink | 400 |
| 2 | 27 | purple | 200 |
| 3 | 28 | white | 100 |
+----+------+----------+------+
结果显示:
<h1 class="1">name1, type1</h1>
<div class="23">red,500</div>
<div class="23">red,500</div>
<div class="24">green,700</div>
<h1 class="2">name2, type2</h1>
<div class="25">pink,400</div>
<div class="26">purple,200</div>
依此类推......我在while循环中使用了一个while循环而没有给我所需的结果,然后我被建议使用MySQL JOIN,但是当我这样做时,我获得匹配id的所有值并且只能显示标题一次,然后在其下列出相关结果,有人可以帮助我吗?
这是我正在使用的简化查询:
while($rows = $headings->fetch_array(MYSQLI_BOTH))
{
$id = $rows['id'];
$conts_q = $mysqli->query("SELECT * FROM `table2` WHERE id='$id'");
$conts_numr = $conts_q->num_rows;
if($conts_numr==0)
{
//Display empty
}
else
{
while($row2 = $conts_q->fetch_array(MYSQLI_BOTH))
{
//Get details and display
}
}
}
答案 0 :(得分:0)
在您的描述中,您使用main_id,但在代码中您只使用id。不确定您在这里使用的是哪种 - 您必须编辑下面的代码以匹配您的实际列名。如果数据库列名实际上是main_id,那么例如$ id = $ rows ['id']的行必须是$ rows ['main_id']。或者它不起作用。
while($rows = $headings->fetch_array(MYSQLI_BOTH))
{
echo '<h1 class="'.$rows['id'].'">'.$rows['name1'].', '.$rows['type'].'</h1>';
$id = $rows['id'];
$conts_q = $mysqli->query("SELECT * FROM `table2` WHERE id='$id'");
$conts_numr = $conts_q->num_rows;
if($conts_numr==0)
{
//Display empty
}
else
{
while($row2 = $conts_q->fetch_array(MYSQLI_BOTH))
{
if ($row2['id'] == $id) {
echo '<div class="'.$row2['secondary_id'].'">'.$row2['color'].', '.$row2['price'].'</div>';
}
}//while
}//else
}//while