0

まず、newbee の質問についてお詫び申し上げます。私は MySQL を初めて使用します。

簡単な写真コンテスト用に 3 つのテーブルがあります。

登録:

ID
UserName
name
LastName
Email
Mobile

フォトギャラリー:

ID
ImageName
user_id
Status=1

投票:

Photo_ID
Date
Time
Status

特定のタイム スライスで各写真の投票を数える必要があり、同点の場合は、最後の投票を受けた写真を最初に確認する必要があります。

私が思いついたクエリは次のとおりです。

SELECT      v.Photo_ID AS "Photo ID",
        g.ImageName AS "Photo URL",
        r.UserName AS "Username",
        r.name AS "Name",
        r.LastName AS  "Surname",
        r.Email AS "E-Mail",
        r.Mobile AS "Phone",
        v.Date AS "Last Vote Date",
        v.Time AS "Last Vote Time",
        COUNT(Photo_ID) AS "Total Votes"
FROM photovote v
    INNER JOIN photogallery g ON v.Photo_ID = g.ID
        INNER JOIN registration r ON g.user_id = r.ID

WHERE v.Status =1
AND g.Status =1

AND v.Date >20130728
AND v.Date <20130805

GROUP BY 1

ORDER BY 10 DESC, 8 DESC, 9 DESC

それにもかかわらず、ORDER BY は正しく機能していません。どんなヒントでも大歓迎です。

ありがとう、アンドレア

4

2 に答える 2

0

特定のタイム スライスで各写真の投票を数える必要があり、同点の場合は、最後の投票を受けた写真を最初に確認する必要があります。

投票と lastVote Time で並べ替えられた photo_ids を取得するには:

select Photo_ID, count(*) as votes, max(Timestamp(Date,Time)) as lastVoteTime 
from photovote 
where Date > [start] and Date < [end] and status = 1
group by Photo_ID 
order by votes desc, lastVoteTime asc;

このクエリの結果を他のテーブルと結合して、目的の結果を得ることができます。

于 2013-08-17T18:16:06.510 に答える