Php 选择具有最小时间值的字段信息
我以为我做的是对的,但我总是得到错误的结果。我试图简单地用min time查找条目的id,但我没有得到该条目Php 选择具有最小时间值的字段信息,php,mysql,Php,Mysql,我以为我做的是对的,但我总是得到错误的结果。我试图简单地用min time查找条目的id,但我没有得到该条目 $qryuserscount1="SELECT id,min(entry_time) FROM scrusersonline WHERE topic_id='$topic_id'"; $userscount1=mysql_query($qryuserscount1); while ($row2 = mysql_fetch_assoc($userscount1)) {
$qryuserscount1="SELECT id,min(entry_time) FROM scrusersonline WHERE topic_id='$topic_id'";
$userscount1=mysql_query($qryuserscount1);
while ($row2 = mysql_fetch_assoc($userscount1)) {
echo $onlineuser= $row2['id'];
}
这是我的问题,它不起作用。然而,这确实起作用,对我来说毫无意义
从ScruseSonline中选择id,其中topic\u id='$topic\u id'按条目顺序\u时限1,有人能快速指出我做错了什么吗?我认为min函数必须与group by子句一起使用。但是,您发布的第二个请求选择了完整的id列表,其中topic_id是您想要的,按输入时间排序(您可以添加一个ASC或DESC,使其最清晰),然后只返回第一个 有什么问题吗?:-) 根据
SQL
标准,此查询无效
您不能在SELECT
列表中使用id
,除非您groupby
it,因为不清楚应该从组中返回哪个id
然而,MySQL
允许此类查询从组中返回任何随机的id
(如果没有groupby
子句,则从整个记录集中返回)
此行为旨在简化主键
与分组依据
的联接:
SELECT mytable.*, COUNT(*)
FROM mytable
JOIN othertable
ON othertable.col1 = mytable.id
GROUP BY
mytable.id
在这种情况下,mytable
中的所有记录保证在组内是相同的,返回哪一条记录并不重要
您的查询不会返回包含最小值entry\u time
的记录。相反,它将返回entry\u time
的最小值和一个满足topic\u id=$topic\u id
条件的随机id
,该条件不能保证属于同一条记录
SELECT id,min(entry_time) FROM scrusersonline WHERE topic_id='$topic_id'
对于与主题id
匹配的每一行,将返回id
和entry\u time
,因为没有可从中选择min(entry\u time)
的group by子句。SELECT
子句只定义要返回的列,它不限制任何行的选择,这就是WHERE
子句的作用
SELECT id FROM scrusersonline WHERE topic_id='$topic_id' ORDER BY entry_time LIMIT 1
当按输入时间
(最小值)排序时,将仅为匹配主题id
(其中主题id=“$topic\u id”
)的第一个(限制1
)返回id
)
因此,是的,
从scrusersonline中选择id,其中topic_id='$topic_id'按条目排序\u时限1
是您要查找的内容。非常感谢您提供的信息性回复。我想我展示的第二种方式是我唯一的选择,对吗?@scarface:是的。如果你在(topic\u id,entry\u time)
上创建一个复合索引,它会变得更快。我只是想如果我能正确地做的话,min可能是一个更有效的方法,但显然这个意图是无效的。谢谢pinkgothic,感谢你的时间
SELECT id FROM scrusersonline WHERE topic_id='$topic_id' ORDER BY entry_time LIMIT 1