关于MySQL语句LIMIT 1和DISTINCT、Group by的使用问题

binarymann 2009-11-16 02:39:10


期望结果如上,想输出红色框内的两条记录,即同一编号下最后一次更新的两条记录

第一次使用distinct尝试如下,但失败,因为distinct daima对于“最后更新时间”这段代码无效


$result=mysql_query("SELECT distinct daima, id FROM db WHERE id='$id'");
while($row=mysql_fetch_array($result)){
echo $row["case_id"]."<br />";
}

$result=mysql_query("SELECT distinct daima, id, start_time FROM db WHERE id='$id'");
while($row=mysql_fetch_array($result)){
echo $row["start_time"]."<br />";
}


第二次使用SELECT * FROM db WHERE id='$id' ORDER BY start_time DESC LIMIT 1
但还是失败,因为两段代码都共享相同的id字段,就只出现了一条结果


第三次使用group by daima,结果出来了两条,但更新的时间不对...


实在没有办法了,特详细描述问题求助于各位达人~谢谢先
...全文
513 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
binarymann 2009-11-16
  • 打赏
  • 举报
回复
果然果然!!!
叩谢dzxccsu达人!
dzxccsu 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 binarymann 的回复:]
果然行了!!!
太神奇了,究竟是什么原因呢?以前echo['关键字']都可以的,为何这次必须用1呢?
[/Quote]

$result=mysql_query("SELECT bh, max(sj) as sj FROM ttime GROUP BY bh");
while($row=mysql_fetch_array($result)){
echo $row["sj"]." <br />";
}
这样也行
binarymann 2009-11-16
  • 打赏
  • 举报
回复
果然行了!!!
太神奇了,究竟是什么原因呢?以前echo['关键字']都可以的,为何这次必须用1呢?
dzxccsu 2009-11-16
  • 打赏
  • 举报
回复

$result=mysql_query("SELECT bh, max(sj) FROM ttime GROUP BY bh");
while($row=mysql_fetch_row($result)){
echo $row[1]." <br />";
试试
binarymann 2009-11-16
  • 打赏
  • 举报
回复
首先请荣我感谢dzxccsu达人的乐意助人精神,太感动了,还建立了表测试...
但是我照着您的例子也做了个一抹一样的测试,居然还是不出时间字段的值...彻底崩溃


<?php
$result=mysql_query("SELECT bh, max(sj) FROM ttime GROUP BY bh");
while($row=mysql_fetch_array($result)){
echo $row["bh"]."<br />";
}
?>

<?php
$result=mysql_query("SELECT bh, max(sj) FROM ttime GROUP BY bh");
while($row=mysql_fetch_array($result)){
echo $row["sj"]."<br />";
}
?>

dzxccsu 2009-11-16
  • 打赏
  • 举报
回复

--测试代码
use
SQL_Test
go
create table ttime(
bh varchar(200) not null,
sj datetime
)
insert into ttime
select '2009111601','2009-11-16 15:01:46'
union all
select '2009111601','2009-11-16 15:02:46'
union all
select '2009111601','2009-11-16 15:03:46'
union all
select '2009111601','2009-11-16 15:04:46'
union all
select '2009111602','2009-11-16 15:05:46'
union all
select '2009111602','2009-11-16 15:07:46'
--查询
select bh,max(sj) from ttime group by bh
--结果
2009111601 2009-11-16 15:04:46.000
2009111602 2009-11-16 15:07:46.000


binarymann 2009-11-16
  • 打赏
  • 举报
回复
我又想了个办法,将编号作为副键,新增了字段名为cid的自动increament的主键

$result=mysql_query("SELECT max(cid), id, daima, start_time FROM db WHERE id='$id' GROUP BY daima");

但是max(cid)好像没有起到作用,因为输出结果还是我主帖的最后一个图...
binarymann 2009-11-16
  • 打赏
  • 举报
回复

就是这样的
dzxccsu 2009-11-16
  • 打赏
  • 举报
回复
把执行的结果贴出来看看!
binarymann 2009-11-16
  • 打赏
  • 举报
回复
我也不清楚,反正将max(UNIX_TIMESTAMP(start_time))用了后,“最后更新”栏里面就无所输出值了

我怀疑是因为max(start_time) 后就没有从数据库抓出start_time这个字段的值得原因,因此我在max(UNIX_TIMESTAMP(start_time))之前也加入了个start_time

即SELECT max(UNIX_TIMESTAMP(start_time)), start_time
这样一来就有值出现在“最后更新”了,但输出的效果还是我正文最后一贴得效果..
dzxccsu 2009-11-16
  • 打赏
  • 举报
回复
你选择出来的结果是什么呢?
dzxccsu 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 binarymann 的回复:]
回dzxccsu达人,我明白您的意思
但这样处理也有问题

因为sj(在我这里既start_time)是echo的内容
如果用了max(start_time)那“最后更新”那一栏就会echo空白,无内容

max(daima)也是同样问题
[/Quote]怎么会空白呢?
binarymann 2009-11-16
  • 打赏
  • 举报
回复
回dzxccsu达人,我明白您的意思
但这样处理也有问题

因为sj(在我这里既start_time)是echo的内容
如果用了max(start_time)那“最后更新”那一栏就会echo空白,无内容

max(daima)也是同样问题
dzxccsu 2009-11-16
  • 打赏
  • 举报
回复

select bh,max(UNIX_TIMESTAMP(sj)) from tt group by bh
dzxccsu 2009-11-16
  • 打赏
  • 举报
回复
select bh,max(sj) from tt group by bh

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧