Foreach的mysql查询结果列表

时间:2017-08-28 14:29:24

标签: php mysql

我正在尝试列出按作者分组的书籍列表,并将结果填充到单选按钮中,以便用户可以选择属于不同作者的书籍。我设法获得结果并显示列表,就像我想要的那样,但是具有相同名称的单选按钮使用户只能选择one本书,即使作者不同。

我的数据库表数据看起来像这样:

id  author  books
1  Author A  Book1
2  Author A  Book2
3  Author B  Book3

我目前的编码如下:

$sql = "SELECT author, GROUP_CONCAT(books SEPARATOR ',') as books FROM library GROUP BY author";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        $books = explode(',',$row['books']);

        $i = 1;
        echo '<ul class="list-unstyled subjects">';
        echo '<li class="bordered" style="width: 30%;">'.$row['author'].'</li>';
        echo '<li class="bordered">';
        echo '<ul><li><input name="books" type="radio" value="" checked>N/A</li></ul>';

        foreach ($books as $book) {
            echo '<ul>';
            echo '<li><input name="books" type="radio" value="'.$book.'" />'.$book.'</li>';
            echo '</ul>';
        }

        echo '</li>';
        echo '</ul>';
        $i++;
    }
}

$sql = NULL;

所以我试图使用变量$i在单选按钮名称的每一端添加编号,但它会使所有单选按钮具有不同的名称。我希望每个作者群都有相同的名称。

1 个答案:

答案 0 :(得分:2)

您为每位作者设置$i1。您需要在 while循环之前初始化它。

if ($result->num_rows > 0) {
    $i = 1;
    while($row = $result->fetch_assoc()) {
        $books = explode(',',$row['books']);

        echo '<ul class="list-unstyled subjects">';
        echo '<li class="bordered" style="width: 30%;">'.$row['author'].'</li>';
        echo '<li class="bordered">';
        echo '<ul><li><input name="books$i" type="radio" value="" checked>N/A</li></ul>';

        foreach ($books as $book) {
            echo '<ul>';
            echo '<li><input name="books$i" type="radio" value="'.$book.'" />'.$book.'</li>';
            echo '</ul>';
        }

        echo '</li>';
        echo '</ul>';
        $i++;
    }
}