我有3个表,其中包含用户的信息(包括Log_Name),日志(您可以在其中找到Login)和评估(如果用户回答了'评估')。所有都通过user_id字段连接。
我想以这种方式在php中输出它:
你能帮我解决这个问题。
修改 有人建议我首先循环Log_Name并在该循环内部,我将循环登录然后将它们显示在表中。但我不知道该怎么做。
答案 0 :(得分:1)
<?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)将返回以逗号分隔的日期列表,然后您可以根据需要显示它。
答案 1 :(得分:0)
我建议摆脱DISTINCT
的想法,只使用ORDER BY
子句。然后,您可以通过检查相关组何时更改来对前端进行分组。使用MySQL GROUP BY
可能还有一个技巧,但它不会转换为其他RDBMS。
答案 2 :(得分: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 rowspan所需的表格。