-1

ユーザーの情報(Log_Nameを含む)、ログ(Loginを見つけることができる)、および評価(ユーザーが「評価」に回答したかどうか)を含む3つのテーブルがあります。すべてuser_idフィールドで接続されています。

私はそれを次のようにphpで出力したいと思います:

ここに画像の説明を入力してください

これを解決するのを手伝ってくれませんか。

編集: 誰かが私が最初にLog_Nameをループし、そのループ内でログインをループしてからそれらをテーブルに表示することを提案しました。しかし、私はそれをどのように行うのか分かりません。

4

3 に答える 3

1

GROUP_CONCATを見てください

<?php
    session_start();
    require_once "common.php";

    $sql = "SELECT *,GROUP_CONCAT(log.date) as login_date FROM user INNER JOIN log ON log.user_id = user.id INNER JOIN evalution ON evalution.user_id = user.id GROUP BY user.id";
    $result = mysql_query($sql) or die(mysql_error());

?>
<table width="40%" border=1>
    <tr>
        <td>Log_Name</td>
        <td>Login</td>
        <td>Evalution</td>
    </tr>
    <?php
        while($row = mysql_fetch_assoc($result))
        {
    ?>
    <tr>
        <td><?php echo $row['name'];?></td>
        <td><?php echo str_replace(",","<br/>",$row['login_date']); ?></td>
        <td><?php echo $row['evalution']; ?></td>
    </tr>
    <?php
        }
    ?>
</table>

GROUP_CONCAT(log.date)は、コンマ区切りの日付リストを返し、必要に応じて表示できます。

于 2013-01-23T09:14:09.933 に答える
0

評価を別の表として置くことの理由はどこにありますか?ともかく:

SELECT u.Log_Name, l.log_time, e.evaluation FROM users_info u LEFT JOIN logs l ON l.user_id = u.user_id LEFT JOIN evaluation e ON e.user_id = u.user_id WHERE u.user_id = 'id'

その後、必要なテーブルをHTML行スパンで表示します。

于 2013-01-23T04:37:11.493 に答える
0

のアイデアを取り除き、句DISTINCTを使用することをお勧めします。ORDER BY次に、関連するグループがいつ変更されるかを確認することで、フロントエンドでグループ化できます。MySQLを使用するトリックもある可能性がありますGROUP BYが、他のRDBMSには変換されません。

于 2013-01-23T04:34:47.327 に答える