0

次のコードは、レコードを取得するためのクエリで使用されます。これは、electors.ID を使用して、2 番目のテーブルから対応する 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'].','; }  
}
4

2 に答える 2

2

関数でサブセレクトを使用できますMAX()WHERE以下を句に追加します。

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

結果のSQLFiddle を次に示します。

于 2012-06-28T17:47:27.710 に答える
1

つまり、コードの最初の 2 つの基準に適合する最新の行だけを確認する必要があります。その場合、事前にvoting_intentionテーブルを除外して、それぞれの最新のエントリだけを気にする必要があります. ここでそれを行う方法を示す質問/回答があります。

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

質問 url: SQL の別の列で MAX(列の値)、DISTINCT で行を選択するにはどうすればよいですか?

于 2012-06-28T17:48:34.493 に答える