0

我想在最晚的时间获取名称和相应的分数。所以我尝试了:

    $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
4

1 回答 1

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

这将根据他的最新(每行 1 行)为您提供一对Name每个Score NameScoreDateName

因此,在这一行中用我的替换您的原始查询:

$queryObj = mysql_query(" ... "); 

然后:

$rows = array();

while($row = mysql_fetch_assoc($queryObj)) {
    $rows[$row['Name']] = $row['Score'];
}

foreach您可以按照您在上一条评论中想要的方式很好地完成它:

foreach($rows as $name => $score) {
    echo $name . ' - ' . $score . "\n";
} 
于 2013-08-29T11:08:17.583 回答