我几乎是一个noob,试图通过搜索来解决这个问题,但我没有成功。根据以前的查询结果难以查询mysql - 可能吗?
我有一个MySQL表是这样的:
保罗 - > 2011-04-01 - > 100
史蒂芬 - > 2011-03-01 - > 100
鲍勃 - > 2011-04-01 - > 150
保罗 - > 2011-04-02 - > 150
史蒂芬 - > 2011-03-02 - > 200
鲍勃 - > 2011-04-01 - > 150
保罗 - > 2011 -04-03 - > 200
Steven - > 2011-03-03 - > 300
所以基本上我有一些名称与日期和分数。日期之间可能存在差距,这意味着保罗可能对昨天有价值,但史蒂文可能不会。 我想执行一个查询,在这个查询中,我可以找到在最后一次输入后的一定天数内没有获得任何积分的所有人的姓名。
我开始的东西是这样的:
$ query =(“SELECT name,MAX(id)FROM ranking GROUP BY name”):
这将确保我有每个人的最后实际分数值,但在此查询我需要执行一个查询,该查询现在可以查找其最近的条目等于或大于最新得分值的X分数值或超过X天的分数值的人员。
我希望这是可以理解的。
之前我通过查询整个表格并在PHP中进行比较来完成所有这些工作。但是这个表现在有将近10,000个条目,这些条目创建的数组超出了内存限制。
是否有可能做出这样的特定查询或者是否有人知道该问题的另一个解决方案? 在此先感谢您的帮助。
@mdma 嗨再次,
你的假设是正确的。每行保存某个日期的名称分数。分数可以增加,减少或保持不变。由于我只给500人得分最高,有人可能有4月1日的价值,但如果他退出前500名,他的价值可能不会在4月2日。但他可能会在4月10日再次获得奖金,前500个最高分。
我试图实现查询方式如下:(我换成分的成绩,因为这是该领域是如何被调用)
$query = "SELECT ranking.name, MAX(ranking.id) rankingId, MAX(ranking.points) rankingPoints, MAX(ranking.date) rankingDate, outrank.name, MAX(outranking.id) outrankId, MAX(outrank.points) outrankPoints, MAX(outrank.date) outrankDate " .
"FROM ranking " .
"LEFT JOIN " .
"(SELECT name, id, points, date FROM ranking GROUP BY name) AS outrank " .
"ON " .
"(ranking.name!=outrank.name " .
"AND outrank.date<=DATE_SUB(ranking.date, INTERVAL 3 DAY) " .
"AND outrank.points>=ranking.points) " .
"GROUP BY ranking.name, outrank.name";
$result = mysql_query($query) or die("You wish, sweetheart!");
但它不工作,到目前为止,模具函数被调用。我花了几个小时试图详细了解查询,但我没有。^^ 我理解加入两个表的概念,但我不明白MAX(ranking.points)rankingPoints的作用。 对不起,如果这有点愚蠢,但我真的写了我的第一个回声“你好”; 4周前。
再次感谢您!
嗨,再一次
我有点做了我自己的工作。我会询问每个人的最新统计数据与
$query = "SELECT rank.id, rank.name, rank.points, rank.niveau, rank.date
FROM (SELECT name, MAX(date) AS maxdate FROM ranking GROUP BY name) AS x
INNER JOIN ranking AS rank ON rank.name = x.name AND rank.date = x.maxdate
WHERE niveau != '---' ORDER BY name";
后来我做这让我所有的结果与日期前X天的第二查询。
$query = sprintf("SELECT rank.name, rank.date, rank.points, rank.id
FROM (SELECT name, MAX(date) AS maxdate FROM ranking GROUP BY name) AS x
INNER JOIN ranking AS rank ON rank.name = x.name AND rank.date <= date_sub(x.maxdate, INTERVAL '%s' DAY)
WHERE niveau != '---' ORDER BY name, date DESC")
但第二个查询会给我所有行的该日期之前的人。有没有办法将其限制为每个排名。名称只有一行?
谢谢!
我想这是一个MySQL函数。我不知道我该如何使用它,以及我如何使用它。 – 2011-04-19 16:26:45