如何一次使用select查询获取所有两个数组值

时间:2013-08-29 10:58:37

标签: php mysql select

我想在最近一次获得姓名和相应的分数。所以我试过了:

    $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

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} ScoreName提供{{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}}