在第一行之后显示部分行

时间:2011-02-10 23:35:36

标签: php mysql

我想尝试以下行

用户名| id |作用

SELECT u.username, u.id, r.role FROM ".TBL_USERS." u
 INNER JOIN ".TBL_ADMIN_ROLES." r ON r.userid = u.id
 WHERE u.userlevel > 3

目前,我使用以下代码来获得结果。

<?php
            $q = $database->getAllAdmins();
            while($row=mysql_fetch_assoc($q))
            {
                ?>
                <a class="main" href="profile.php?id=<? echo $row['id']; ?>"><? echo $row['username']; ?></a>
                <ul>
                    <li><? echo $row['role']; ?></li>
                </ul>
                <?
            }
            ?>

显然,这是循环并反复显示用户名。 我想要它做的是显示用户名一次,然后显示下面的每个角色。

有什么想法吗?谢谢:))

2 个答案:

答案 0 :(得分:0)

如果您在查询中添加ORDER BY i.id,则可以使用变量跟踪最后一位用户。

<?php
    $q = $database->getAllAdmins();
    $lastUserID = 0;
    while($row=mysql_fetch_assoc($q))
    {
        $newUser = $lastUserID != $row['id'];
        if($newUser) {
?>
            <a class="main" href="profile.php?id=<? echo $row['id']; ?>"><? echo $row['username']; ?></a>
            <ul>
<?      }
?>
        <li><? echo $row['role']; ?></li>
<?      if($newUser) {
?>
        </ul>
<?      $lastUserID = $row['id'];
        }

    }
?>

答案 1 :(得分:0)

$q = $database->getAllAdmins();
$user = "";
while($row=mysql_fetch_assoc($q)) {
    if ($user != $row['username']) {
        if ($user != "") { echo "</ul>"; }
        echo "<a class='main' href='profile.php?id={$row['id']}'>{$row['username']}</a>";
        echo "<ul>";
    }
    echo "<li>{$row['role']}</li>";
    $user = $row['username'];
}

我的回答与其他概念相同,只是更清洁。