我想在最近一次获得姓名和相应的分数。所以我试过了:
$queryObj = mysql_query("SELECT `Name`,`Score` from `Table`.`Score` where `Date` = ( SELECT max(`Date`) from `Table`.`Score`) and `Name`<>'' ");
然后通过以下方式获得价值:
while( $obj = mysql_fetch_object( $queryObj ) ) {
$data = array();
$data['Name'] = $obj->Name;
$data['Score'] = $obj->Score;
$searches[] = $data;
}
但是当我打印时:
print_r(array_values($searches));
数组中缺少第一个值,因此这不是正确的方法。 我也尝试过:
$row = mysql_fetch_assoc($queryObj);
for ($i = 0; $i <3; $i++)
print( $row['Name'][$i]." Score: ".$row['Score'][$i]."<br />\n");
但它也不会给我正确的结果。如何从该查询中获取值? (查询是正确的,我测试了它)。有人提出建议吗?
编辑:我在这里添加我的示例数据:
Name Score Date
abc 3 2013-08-29 10:11:47
abc 2 2013-08-29 09:39:23
abc 1 2013-08-28 10:22:28
jane 2 2013-08-29 09:39:23
2013-08-29 10:08:36
jane 1 2013-08-29 10:11:47
tarzan 1 2013-08-29 10:11:47
注意:是的,有一些空白值。
我的预期结果是:
abc score 3
jane score 1
tarzan score 1
答案 0 :(得分:0)
好的,所以在您更新了问题并提供了预期后,您的查询应如下所示:
SELECT t1.Name, t1.Score
FROM Table.Score t1
INNER JOIN
(
SELECT max(Date) MaxDate, Name, Score
FROM Table.Score
WHERE Name <> ''
GROUP BY Name
) t2
ON t1.Name = t2.Name AND t1.Date = t2.MaxDate
根据最新的Name
,这将为{strong} Score
和Name
提供{{1>}和Score
成对Date
Name
{每$queryObj = mysql_query(" ... ");
行1行。
所以在这一行中用我的原始查询替换:
$rows = array();
while($row = mysql_fetch_assoc($queryObj)) {
$rows[$row['Name']] = $row['Score'];
}
然后:
foreach
你可以在上次评论中以你想要的方式foreach($rows as $name => $score) {
echo $name . ' - ' . $score . "\n";
}
很好地使用它:
{{1}}