2013-11-27 118 views
1

我有兩個表; 'client'和'sys_notes'在同一個數據庫中。 (SELECT client.*, sys_notes.* FROM client LEFT JOIN sys_notes ON sys_notes.client_id = client.id ORDER BY create_date DESC結合兩個表並回顯結果(PHP MYSQL)

我需要兩個表結合回聲在相同的<div>content</div>,像這樣:

從客戶端回聲所有= first.name + last.name(例如斯科特)
從客戶端回聲所有=角色
呼應全部來自客戶端=其他任何
由羅伯特斯科特=注1,注2,注3,注意事項(等)發送sys_notes呼應所有...
呼應全部來自客戶端=其他任何
回聲均來自客戶端=其他任何其他

輸出示例:


<div class="content"> 

羅伯特斯科特
主管
羅伯特工作在順序辦公的公司。
Robert's指出:今天

  • :(從sys_notes表注)
  • 昨日(從sys_notes表注)
  • 19.oct 2013(注:從sys_notes表)

Robert's電話:000 000 000
Robert's電子郵件:等
約羅伯特其他信息:............

</div> 

<div class="content"> 

麗莎·約翰遜
主管
麗莎工作在營銷DEP。
Lisas's指出:今天

  • :(從sys_notes表注)
  • 12.may 2013(注:從sys_notes表)

Lisa's電話:000 000 000
Lisa's電子郵件:等
關於Lisa其他信息:............

</div> 

當我今天羅伯特正在呼應的結果「遙相呼應」很多次,他有筆記,
在每個<div class="content">一個音符。 (在Robert的例子中有3個註釋& 3個不同的Robert-div被迴應。)

請幫忙。

--- UPDATE ---

-- Table structure for table `sys_notes` 

CREATE TABLE IF NOT EXISTS `sys_notes` (
    `note_id` int(11) NOT NULL AUTO_INCREMENT, 
    `client_id` int(11) NOT NULL, 
    `note_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `owning_user` varchar(50) NOT NULL, 
    `note` varchar(500) NOT NULL, 
    PRIMARY KEY (`note_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=12 ; 

-- Table structure for table `client` 

CREATE TABLE IF NOT EXISTS `client` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `create_date` datetime NOT NULL, 
    `first_name` varchar(50) NOT NULL, 
    `last_name` varchar(50) NOT NULL, 
    `phone` varchar(20) NOT NULL, 
    `email` varchar(50) NOT NULL, 
    `issue` varchar(50) NOT NULL, 
    `other` longtext NOT NULL, 
    `owning_user` int(11) NOT NULL, 
    `status` varchar(10) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1081 ; 

回答

0

使用:的

SELECT DISTINCT 

代替:

SELECT 

或GROUP BY語句。

- 編輯 -

例回聲:

$result = $db->query("SELECT client.*, GROUP_CONCAT(sys_notes.note SEPARATOR "|") as note, sys_notes.* FROM client LEFT JOIN sys_notes ON sys_notes.client_id = client.id GROUP BY sys_notes.client_id ORDER BY create_date DESC"); 

ob_start(); 
?> 

<div class="content"> 

<?php 
foreach($result as $row) { 

    sprintf("<p>%s %s<br />%s<br />%s</p> %s <ul>", $row['firstname'], $row['lastname'], $row['role'], $row['desc'](example)); 

    foreach(explode("|", $row['note']) as $note) { 
     sprintf("<li>%s</li>", $note); 
    } 

    sprintf("</ul>"); 
} 
?> 
</div> 
<? 

$result = ob_end_clean(); 

echo $result; 

- FINAL UPDATE -

<?php 

try { 
    $db = new PDO($dsn, $user, $password); 
} catch (PDOException $e) { 
    echo 'Connection failed: ' . $e->getMessage(); 
} 

$result = $db->query('SELECT client . * , GROUP_CONCAT(sys_notes.note SEPARATOR "|") AS n, sys_notes.* 
FROM client 
LEFT JOIN sys_notes ON sys_notes.client_id = client.id 
GROUP BY sys_notes.client_id 
ORDER BY create_date DESC'); 

ob_start(); 
?> 

<div class="content"> 

<?php 

foreach($result as $row) { 

    printf("<p>%s %s<br />%s</p> %s <ul>", $row['first_name'], $row['last_name'], $row['issue'], $row['other']); 

    foreach(explode("|", $row['n']) as $note) { 
     printf("<li>%s</li>", $note); 
    } 

    printf("</ul>"); 
} 
?> 
</div> 
<?php 

ob_end_flush(); 
+0

你能解釋一下嗎?那麼我會如何迴應它以獲得如上所述的結果? – mikswe

+0

只循環結果並回顯某些行,如echo $ row ['note']; – Lashus

+0

你好,我正在研究你的建議,我明白我們在做什麼,至少那很好! =)。我試過了,但輸出結果只有「1」。從字面上看:1(這是sys_notes中的第一個id(AI))。你能幫我多一點,我真的很感謝你在這裏幫忙 - 謝謝! – mikswe

0

步驟:

1.Make Array 
2.you use while loop for iterating complete if first+lastname is same then use same array index 
3. within loop make array like $a['notes'][]=$row['NOTES']; 

然後回聲上述陣列

+0

確定以下,但你能給我的例子(3.)的數組和「然後回聲以上數組」? – mikswe