0

このコードで:

    $query = "select users.id_user, users.full_name, users.rights, users.group, group.id, group.name
     from users
        inner join group
            on users.group=group.id
                    where users.rights= 2";

    // connection code

    while ($re = mysql_fetch_array($res))

    {
            $id_user = $re["id_user"];
            $id_group = $re["id"];
            $full_name= $re["full_name"]; 
            $group_name= $re["name"];

        echo "<div>";
        echo "<p><strong>$group_name</strong></p>";
        echo "$full_name<br />";
        echo "</div>";  
    }

    ?>

私はこれを得る:

グループ1
ユーザー1

グループ
1 ユーザー2

グループ2
ユーザー3

グループ2
ユーザー4

そして、私は次のようにそれを必要とします:

グループ
1 ユーザー
1 ユーザー2

グループ 2
ユーザー 3
ユーザー 4

グループ名を一度だけ表示するには?

4

3 に答える 3

0

データベースの力を利用して、必要な情報を提供するようにクエリを微調整します。

select 
   usergroup.name 
 , GROUP_CONCAT(user.name SEPARATOR '<br />') 'users'

from 
 user

inner join 
 usergroup

on
 user.usergroup_id = usergroup.id

where 
 user.rights = 2

group by 
  usergroup.id

デモhttp://sqlfiddle.com/#!2/0d104/1を参照してください。php で $row['users'] を使用できます。

于 2013-09-18T21:43:41.217 に答える
0

このタスクには連想配列を使用できます。たとえば、配列 $groups を作成し、while ループで次のようにします。

    $groups[$re["name"]]["full_name"][] = $re["full_name"];

次に、$groups を介して html ループを表示し、その内部でフルネームをループします。

于 2013-09-18T21:19:33.440 に答える
0

これは私が思いついたものです:

$query = "SELECT users.id_user, users.full_name, users.rights, users.group, group.id, group.name
         FROM users
         INNER JOIN group
         ON users.group=group.id
         WHERE users.rights=2
         ORDER BY group.name ASC";

// connection code

$group_name = '';

while ($re = mysql_fetch_array($res))
{
    if( $group_name === '' )
    {
        $group_name = $re["name"];
        echo "<div>";
        echo "<p><strong>$group_name</strong></p>";
    }
    elseif( $group_name !== $re["name"] )
    {
        $group_name = $re["name"];
        echo "</div>";
        echo "<div>";
        echo "<p><strong>$group_name</strong></p>";
    }

    $id_user = $re["id_user"];
    $id_group = $re["id"];
    $full_name= $re["full_name"]; 

    echo "$full_name<br />";

}

?>

これは基本的にグループ名で結果を並べ替えており、反復中にグループ名がチェックされています。同じ場合は名前のみが出力され、異なる場合は div が閉じられ、新しいものが作成され、新しいグループ タイトルがエコーされます。

于 2013-09-18T21:37:21.863 に答える