繁体   English   中英

在where子句的数据库列中查找最大值

[英]Find Max Value In Database Column With Where Clause

可以说我以这种方式设置了数据库表,

ID | Name  | Area | Timestamp
---+-------+------+------------
1  | Hill  | 1    | 1293243080
2  | Sam   | 1    | 1293243084
3  | Joe   | 2    | 1293243087
4  | Bob   | 2    | 1293243089
5  | Matt  | 3    | 1293243091
6  | Billy | 3    | 1293243095

然后,我希望返回时间戳最大且具有特定区域号的人的姓名。

但是,当我尝试返回名称Bob时,我只会得到Billy,因为他的时间戳记最大。

我怎样才能使php不仅选择具有最大时间戳的人,而且还要选择具有特定区域号的人?

到目前为止,这是我的代码-

(之所以循环,是因为我显示的是每个区域中时间戳最大的人的名字)

for ($t = 1; $t <= 3; $t++){
   $result = mysql_query("SELECT * FROM forum_posts WHERE Area='$t' AND Timestamp=(select max(Timestamp) from forum_posts)");

   while($row = mysql_fetch_array($result))
   {
       $post_name[$t]=$row['Name'];
   }
}

print_r ($post_name); 

你们建议我做什么?

   $result = mysql_query("SELECT * FROM forum_posts WHERE Area='$t' AND Timestamp=(select max(Timestamp) from forum_posts where Area='$t')");

更好的选择是。

$result = mysql_query("SELECT * FROM forum_posts WHERE Area='$t' ORDER BY Timestamp DESC LIMIT 1");

用这个

$ result = mysql_query(“ SELECT * FROM forum_posts WHERE Area ='$ t'ORDER BY Timestamp DESC LIMIT 1”);

您需要在查询中使用GROUP BY

您需要一个OR条件。 该查询将是:

$result = mysql_query("SELECT * FROM forum_posts WHERE Area='$t' OR Timestamp=(select max(Timestamp) from forum_posts)");
SELECT * FROM forum_posts (
  SELECT
    RANK() OVER (ORDER BY timestamp ASC) AS ranking,
    name
  FROM person
  WHERE area = 1
) AS foo
WHERE ranking = 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM