2013-11-27 2 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 (например Scott)
эхо все от клиента = роль
эхо все от клиента = все остальное
эхо все из sys_notes посланных Роберт Скотт = Note1, Примечание2, Note3, ноты (и др.) ...
эхо все от клиента = все остальное
эхо все из client = все остальное

пример вывода:


<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"> 

Lisa Johansson
Руководитель
Лиза работает в маркетинговом отд.
Lisas's отмечает:

  • сегодня (примечание из таблицы sys_notes)
  • 12.may 2013 (Примечание: Из таблицы sys_notes)

Lisa's Телефон: 000 000 000
Lisa's Электронная почта: и т.д.
Другая информация о Лизе: ............

</div> 

Когда я эхо результаты сегодня Роберт быть «эхом», как много раз он отмечает,
с одной ноты в каждом <div class="content">. (В примере у Роберта есть 3 примечания & 3 разных Роберта-Ди.)

Пожалуйста, помогите.

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

- ЗАВЕРШЕНИЕ 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 (это первый id (AI) в sys_notes ...). Можете ли вы помочь мне немного больше, я действительно ценю вашу помощь здесь - спасибо! – 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.) массива и «then echo above array»? – mikswe

Смежные вопросы