2016-05-31 18 views
0

複数のテーブルがあります.1つはサイトを含み、もう1つはユーザーを含んでいます。特定のユーザーを特定のサイトにバインドするリンクがあります。私は私のクエリを実行すると:1つの列と複数の値を表示するSQLクエリ

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

を私は次のような出力が得られます。

SITE | FULLNAME 

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

I:私が探している以下のサイトのリストを持つ1 FULLNAMEはある

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 

これが可能なのか、私が探しているフォーマットを得るために何か他のものを使用しなければならないかどうかは分かりません。

私は私のクエリはこれに変更された最初の...オフ....含まれている必要があることを、ここでいくつかの詳細を追加するつもりです:

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()); 

私が望むすべてを与えること...私は、ディスプレイに使用しています.MY 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スクリプトで出力するだけで簡単に実行できます。実装する必要があるのは、基本的な1レベルの_group break_です。 – CBroe

答えて

1

を実行するようにこれは正確に何をしたいではありませんが、それは役立つかもしれない両方の2つのテーブルのユーザID等の主キー列が存在する必要があります:

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

次のクエリ

select a.site,b.fullname from site a, users b where a.id = b.id 
関連する問題