2016-05-31 38 views
0

我有幾個表......一個包含網站,另一個包含一些用戶。有一個鏈接將特定用戶綁定到特定網站。當我運行我的查詢:顯示一列和多值的SQL查詢

select sites.site, users.fullname 
from sites 
inner join users 
on sites.nameid = users.id; 

我得到以下輸出:

SITE | FULLNAME 

site A | John Doe 
site B | John Doe 
site C | John Doe 
site D | Roger Rabbit 
site E | Roger Rabbit 
site F | Batman 

我正在尋找的是一個FULLNAME與站點的列表如下:

SITE | FULLNAME 

site A | John Doe 
site B 
site C 
site D | Roger Rabbit 
site E 
site F | Batman 

我不知道這是否甚至可能,或者如果我不得不使用別的東西來獲得我正在尋找的格式。

我要在這裏補充一些更多的細節,我應該已經包括....首先...我的查詢更改爲此:

SELECT completed.date, users.username, iata.code, tasks.task 
FROM completed  
JOIN users   
ON users.id = completed.name  
JOIN iata   
ON iata.id = completed.code  
JOIN tasks   
ON tasks.id = completed.task 
WHERE MONTH(completed.date) = MONTH(NOW()) AND YEAR(completed.date) = YEAR(NOW()); 

這給了我一切,我想.. 。我的PHP/HTML,我使用顯示如下:

<!DOCTYPE html> 
<html> 

    <head> 
     <title>SPOC Report</title> 
     <meta charset=utf-8> 
    </head> 

    <body> 
     <?php 
     require 'db/spoc_config.php'; 
     ?> 

     <?php 

     $conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 

     if ($conn->connect_error) { 
      die("Connection failed: " . $conn->connect_error); 
     } 

     $sql_count = " 
SELECT completed.date, users.username, iata.code, tasks.task 
FROM completed  
JOIN users   
ON users.id = completed.name  
JOIN iata   
ON iata.id = completed.code  
JOIN tasks   
ON tasks.id = completed.task 
WHERE MONTH(completed.date) = MONTH(NOW()) AND YEAR(completed.date) = YEAR(NOW()); 
"; 

     $result_count = $conn->query($sql_count); 

     $count = mysqli_fetch_row($result_count); 
     $str_count = implode($count); 

     date_default_timezone_set('UTC'); 
     $today = date('l, jS F Y'); 
     $week = date('W'); 
     $to = "[email protected]"; 
     $subject = "SPOC: Monthly Report " . $today;   
     $heading = "<b>SPOC Report: </b>"; 

     $message = "<h2>" . $heading . " " . $today . "</h2>"; 
     $message .= '<table style="font-family: verdana,arial,sans-serif;font-size:11px;color:#333333;border-width: 1px;border-color: #666666;border-collapse: collapse;border-spacing: 2px;">'; 
     $message .= ' 
     <th style="border-width: 1px;padding: 8px;border-style: solid;border-color: #666666;background-color: #dedede;">Spoc</th> 
     <th style="border-width: 1px;padding: 8px;border-style: solid;border-color: #666666;background-color: #dedede;">Site</th> 
     <th style="border-width: 1px;padding: 8px;border-style: solid;border-color: #666666;background-color: #dedede;">Task</th>'; 

     if ($result_count->num_rows > 0) { 
     while($row = $result_count->fetch_assoc()) { 
     $message .= '<tr style="white-space: normal;line-height: normal;font-weight: normal;font-variant: normal;font-style: normal;text-align: start;"> 
      <td style="border-width: 1px;padding: 8px;border-style: solid;border-color: #666666;background-color: #ffffff;display: table-cell;vertical-align: inherit;">'.$row["username"].'</td> 
      <td style="border-width: 1px;padding: 8px;border-style: solid;border-color: #666666;background-color: #ffffff;display: table-cell;vertical-align: inherit;">'.$row["code"].'</br></td> 
      <td style="border-width: 1px;padding: 8px;border-style: solid;border-color: #666666;background-color: #ffffff;display: table-cell;vertical-align: inherit;">'.$row["task"].'</br></td> 
      </tr>'; 
       } 
      } else { 
       echo "0 results"; 
      } 
     $message .= '</table>'; 


     $header = "From:[email protected] \r\n"; 
     $header .= "MIME-Version: 1.0\r\n"; 
     $header .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 

     $retval = mail ($to,$subject,$message,$header,'[email protected]'); 


     $conn->close(); 
     ?>  
    </body> 
</html> 

然而,看起來就像這樣:

SPOC  | SITE | TASK 

JohnDoe  | SITE A | TASK1 
JohnDoe  | SITE A | TASK2 
JohnDoe  | SITE B | TASK1 
JohnDoe  | SITE C | TASK1 
ROGERRABBIT | SITE A | TASK1 
ROGERRABBIT | SITE A | TASK2 

我在找什麼:

JohnDoe  | Site A | TASK1, TASK2, TASK3 
JohnDoe  | Site B | Task1, Task2 
RogerRabbit | Site A | tASk1, Task2 

希望這個清楚了一下。對不起人們的困惑。

+0

我想你可能會嘗試查詢用戶,然後列出該用戶的網站,而不是查詢網站,並列出每個網站以及該網站的每個條目。對不起,我不能詳細說明,我現在要離開這個房子。 – ddonche

+1

你當前的php代碼是用來創建你當前的佈局的?一個簡單的步驟就是使用一個變量來保存當前的'FULLNAME',即'$ currentFULLNAME'。如果值行匹配'$ currentFULLNAME'值,則不會回顯出'FULLNAME'行。如果行值不匹配,則將'$ currentFULLNAME'設置爲新名稱並回顯出行值 – Sean

+0

我不會嘗試在SQL中獲得該結果,這將會非常繁瑣。只需在通過PHP腳本輸出這些記錄時執行此操作 - 您只需執行一個基本的單級_group break_即可。 – CBroe

回答

1

這不正是你想要的,但它可能會幫助:

SELECT users.fullname, GROUP_CONCAT(sites.site ORDER BY sites.site SEPARATOR ', ') 
FROM sites 
LEFT JOIN users ON sites.nameid = users.id 
GROUP BY users.id; 

此輸出:

John Doe  | site A, site B, site C 
Roger Rabbit | site D, site E 
Batman  | site F 

,達到您想要的結果,我會做這在我的PHP腳本。

+0

我編輯了這個問題,並添加了上面的php ......對不起,應該首先完成它。 – Xyz

+0

您應該可以通過在任務上應用'GROUP_CONCAT'函數(以','作爲分隔符)以及在用戶和網站上應用GROUP BY來獲得所需內容。只要使用我之前的回答試試看,如果遇到大麻煩,請告訴我們。 ^^ – PiTiNiNjA

0

必須有一個主鍵列,如來自兩個表用戶ID,以便執行以下查詢

select a.site,b.fullname from site a, users b where a.id = b.id