MySQLi以2个表的形式加入和显示不同的细节

时间:2014-03-04 16:34:19

标签: php mysql

您好我刚才问过一个类似的问题,但只是意识到我没有得到解决问题的答案。

我在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
        }
    }
}

1 个答案:

答案 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