在最新记录上使用JOIN的mySQL查询并非所有记录

时间:2012-06-28 16:39:17

标签: php mysql inner-join

以下代码用于查询以获取记录。它使用electors.ID从第二个表中查找相应的voting_intention.elector。

$criteria = "FROM voting_intention,electors WHERE voting_intention.elector = electors.ID AND voting_intention.pledge IN ('C','P') AND electors.postal_vote = 1 AND electors.telephone > 0"

问题是有些选民在voting_intentions表中会有多个承诺。

我需要根据每个选民的字段voting_intention.pledge仅匹配最新的votin_intention.date

实现这一目标的最简单方法是什么。

其余代码:

function get_elector_phone($criteria){
    $the_elector = mysql_query("SELECT * $criteria ORDER BY electors.ID ASC"); while($row = mysql_fetch_array($the_elector)) { 
    echo $row['ID'].','; }  
}

2 个答案:

答案 0 :(得分:2)

您可以使用MAX()功能的子选择。将以下内容添加到WHERE子句中。

AND voting_intention.date = (select MAX(date) 
                         from voting_intention vote2 
                         where voting_intention.elector = vote2.elector)

这是SQLFiddle of the results.

答案 1 :(得分:1)

所以,你只想在你的代码中查看符合前两个条件的最新行。在这种情况下,您可能希望事先过滤出voting_intention表,只需要担心每个表的最新条目。有一个问题/答案显示了如何做到here

尝试选择以下而不是voting_intention(从链接问题的答案中,替换了一些表和字段名称):

SELECT voting_intention.*
FROM voting_intention
INNER JOIN
(
SELECT elector, MAX(date) AS MaxDate
FROM voting_intention
GROUP BY elector
) groupedintention ON voting_intention.elector = groupedintention.elector 
AND voting_intention.date = groupedintention .MaxDate

问题网址:How can I SELECT rows with MAX(Column value), DISTINCT by another column in SQL?