MySql Select query (ограниченный выбор в JOIN) - PullRequest
2 голосов
/ 25 августа 2011

У меня есть 2 таблицы: tbl_customers и tbl_customers_notes

Я отображаю всех своих клиентов в строках таблицы (как это делается), и я хочу добавить столбец для отображенияпоследняя известная запись datetime в связанной таблице tbl_customers_notes.

Очевидно, что это отношение один-ко-многим, где соответствующий recID будет customerid.

Здесьэто то, что у меня есть:

<?php
$result = mysql_query("SELECT `customername` FROM `tbl_customers` ");
while($row = mysql_fetch_array( $result )) {
?>  
    <tr>
      <td><?php echo $customername;?></td>
      <td><?php echo 'note datetime'; ?></td>
    </tr>
<? } ?> 

Если я сделаю JOIN с таблицей заметок, я получу дубликаты.Могу ли я ограничить tbl_customers_notes, чтобы просто выбрать последнюю известную запись для этого пользователя?

Ответы [ 3 ]

2 голосов
/ 25 августа 2011

Попробуйте:

select c.customerid, c.customername, max(cn.note_date)
from tbl_customers c
left join tbl_customers_notes cn on c.customerid = cn.customerid
group by  c.customerid, c.customername

Причина группировки как по обычному имени, так и по имени клиента состоит в том, что в случае, если одно и то же имя клиента может иметь разные кастомериды.Внешнее объединение должно включать клиентов, у которых нет заметок.

1 голос
/ 25 августа 2011
SELECT `customername`, max_datetime FROM `tbl_customers` c left join 
    (select max(datetime) max_datetime, customerid 
    from tbl_customers_notes cn group by customerid) cn on 
 on c.id=cn.customerid;
0 голосов
/ 25 августа 2011

Я думаю, что HAVING в порядке.

SELECT c.customername, n.note_date
FROM tbl_customers c
         INNER JOIN tbl_customers_notes n ON c.customerid = n.customerid
GROUP BY c.customername
HAVING n.note_date = MAX(n.note_date)
...