-1

我有 3 个表,其中一个包含用户信息(包括 Log_Name)、日志(您可以在其中找到登录名)和评估(如果用户回答了“评估”)。所有都由 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 回答