2013-01-23 51 views
-1

我有3個表包含用戶的信息(包括Log_Name),日誌(您可以在其中找到Login)和評估(如果用戶回答'評估' 或不)。所有通過user_id字段連接。在一個表中顯示不同的列和非不同列

我想在PHP輸出它以這種方式:

enter image description here

你能幫我解決這個。

編輯: 有人建議我首先循環Log_Name和循環內,我會循環登錄,然後在表格中顯示出來。但我不知道該怎麼做。

+0

重複的問題http://stackoverflow.com/questions/14476653/creating-blank-row-for-repeating-row – Alex

+0

@ w0rldart這是一個不同的問題。正如你所看到的,這一個關注sql與另一個用於顯示。 – bayan0926

回答

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)將返回逗號分隔的最新列表,那麼你可以顯示它根據自己的需要。

0

我建議擺脫DISTINCT的想法,只使用ORDER BY條款。然後,您可以通過檢查相關組更改的時間將其分組在前端。使用MySQL GROUP BY也可能會有一些技巧,但它不會轉化爲其他RDBMS。

+0

我應該怎麼做? – bayan0926

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所需的表。

+0

我把評估放在不同的桌子上,因爲他們每天可以登錄多次,但他們必須回答評估一次。謝謝! :) – bayan0926

+0

如何顯示此?抱歉! :'( – bayan0926

相關問題