MySql选择查询(在JOIN上选择限制)

时间:2011-08-25 18:34:42

标签: php mysql select left-join greatest-n-per-group

我有2个表:tbl_customerstbl_customers_notes

我在表行中显示所有客户(就像一个人那样),我想添加一个列,用于显示相关datetime表中的最后一个已知tbl_customers_notes记录。 / p>

显然,这是一对多的关系,匹配的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>
<? } ?> 

如果我使用notes表进行JOIN,我会得到重复。我可以限制tbl_customers_notes只选择该customerid的最后一条已知记录吗?

3 个答案:

答案 0 :(得分:2)

试试这个:

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

对customerid和customername进行分组的原因是,如果相同的customername可能具有不同的customerid。外部联接包括没有笔记的客户。

答案 1 :(得分:1)

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;

答案 2 :(得分:0)

我认为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)