Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL统计ID的出现次数_Php_Mysql_Join - Fatal编程技术网

Php MySQL统计ID的出现次数

Php MySQL统计ID的出现次数,php,mysql,join,Php,Mysql,Join,我有以下查询,它返回事件详细信息和基于投票数的排名 SELECT e.guid, e.name, e.desc, e.location, e.votes, @curRank := @curRank + 1 AS rank FROM event e, (SELECT @curRank := 0) r ORDER BY votes DESC 这给了我所需的输出。但是,因为我想存储更多关于谁投票的信息,以确定用户是否可以投票,因为每人可以投1票。我创建了一个名为event_vots的新

我有以下查询,它返回事件详细信息和基于投票数的排名

SELECT e.guid, e.name, e.desc, e.location, e.votes,
       @curRank := @curRank + 1 AS rank
FROM event e, (SELECT @curRank := 0) r
ORDER BY votes DESC
这给了我所需的输出。但是,因为我想存储更多关于谁投票的信息,以确定用户是否可以投票,因为每人可以投1票。我创建了一个名为event_vots的新表,如下所示:

event_vote_id | event_guid | user_guid
       1           abc1         def6
       2           ghi4         def6
       3           abc1         lmn2
如何使第一个查询再次工作,以替换e.votes字段,该字段随事件\投票中事件\ guid的出现次数递增

预期结果

guid:abc1

姓名:testevent

描述:示例

地点:伦敦

投票:2


排名:1

我没有测试它,但希望它能工作

SELECT e.guid, e.name, e.desc, e.location, 
    (SELECT COUNT(ev.id) FROM event_votes ev WHERE ev.event_guid = e.guid) AS votes,
           @curRank := @curRank + 1 AS rank
    FROM event e, (SELECT @curRank := 0) r
    ORDER BY votes DESC

最好做一个真正的左撇子join@DanielE. 这取决于需要。如果您只有一个select,子查询比left join更好,至少我是这样认为的:但是当然,我们也可以使用真正的left join。但是,排名被打破了,如果我有一个有1票的事件,而其余的没有,它排名第二。有什么想法吗?@H1ggsy最快最肮脏的方法是返回null而不是0选择e.guid、e.name、e.desc、e.location,选择IFCOUNTev.id>0,COUNTev.id,事件投票为NULL,其中ev.event\u guid=e.guid作为投票,@curRank:=@curRank+1作为事件e的排名,选择@curRank:=0按投票顺序描述```