Php 在最新记录上使用JOIN的mySQL查询不是所有记录

Php 在最新记录上使用JOIN的mySQL查询不是所有记录,php,mysql,inner-join,Php,Mysql,Inner Join,以下代码用于获取记录的查询。它使用electors.ID从第二个表中查找相应的投票人 $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" 问题是有些选民在投票表上会有不止

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

$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"
问题是有些选民在投票表上会有不止一项承诺

我只需要根据每个选民的最新投票意向.承诺日期字段进行匹配

最简单的实现方法是什么

代码的其余部分:

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'].','; }  
}

您可以使用带有
MAX()
函数的子选择。将以下内容添加到
WHERE
子句中

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

下面是一个

您可以使用带有
MAX()
函数的子选择。将以下内容添加到
WHERE
子句中

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

这里有一个

非常重要,您只想查看符合代码中前两个条件的最新行。在这种情况下,您可能希望事先过滤掉投票意向表,只需担心每个项目的最新条目。有一个问题/答案说明了如何做到这一点

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


问题url:

非常多,您只想查看符合代码中前两个条件的最新行。在这种情况下,您可能希望事先过滤掉投票意向表,只需担心每个项目的最新条目。有一个问题/答案说明了如何做到这一点

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


问题url:

一个说我语言的人。我不知道有一个SQLFiddle非常好是的,就像JSFIDLE一样。我喜欢用它,因为它让我在把答案扔出去之前先测试一下。另外,它允许提交者验证答案,甚至尝试其他更改。。。答案取决于个别选民在投票意向表中没有多行且日期完全相同。根据你的名字,我认为这不太可能,非常不可能。如果发生这种情况,那可能是因为有人输入错误。不过我们可以更安全地加上时间。一个说我语言的人。我不知道有一个SQLFiddle非常好是的,就像JSFIDLE一样。我喜欢用它,因为它让我在把答案扔出去之前先测试一下。另外,它允许提交者验证答案,甚至尝试其他更改。。。答案取决于个别选民在投票意向表中没有多行且日期完全相同。根据你的名字,我认为这不太可能,非常不可能。如果发生这种情况,可能是因为有人输入错误。不过,我们可以更安全地增加时间。