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

1

用这个替换你的 ORDER BY:

ORDER BY `Last Vote Time` DESC, `Last Vote Date` DESC, `Total Votes` DESC;

由于“”(空格)字符,您需要使用反引号。ORDER BY 的排序也有所不同。

此外,您需要在 GROUP BY 中包含更多字段,否则数据将在 MYSQL 中丢失(其他 DBMS 会使您的查询无效)。

将这些添加到您的 GROUP BY:

GROUP BY v.Photo_id, `Last Vote Date`,`Last Vote Time`

(如果随着时间的推移有任何其他变化(例如名称),那么这可能会在以后引起问题 - 但这是另一回事)

于 2013-08-17T13:55:58.627 回答
0

我需要在给定的时间片上计算每张照片的票数,如果出现平局,我需要先检查获得最后一票的那张。

只是为了让 photo_ids 按投票和 lastVote 时间排序:

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 回答