急!!MYSQL存储过程问题

老9 2011-06-09 07:43:50
我想写一个存储过程,想修改每种分类的最新的5条数据。下面是我写的存储过程
BEGIN
DECLARE atId INT;
DECLARE ids CURSOR for select id FROM house_agent;
OPEN ids;
WHILE stop <> 1 DO
FETCH ids INTO atId;
UPDATE house_rent SET recommend=TRUE WHERE id IN (SELECT id FROM house_rent where agentId = atId and deleted=FALSE );
END WHILE;
END
上面sql语句保存时不报错,但是当我加上limit 限制时就报错,说IN 和limit 不能共用。
UPDATE house_rent SET recommend=TRUE WHERE id IN (SELECT id FROM house_rent where agentId = atId and deleted=FALSE LIMIT 5);

急切需要大侠们的帮助,高分求解,我用的mysql是5.0的。
...全文
120 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
老9 2011-06-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lxq19851204 的回复:]
改成这个试一下

SQL code
UPDATE house_rent A Inner Join
(SELECT id FROM house_rent where agentId = atId and deleted=FALSE LIMIT 5)T On A.ID=T.ID
SET A.recommend=TRUE
[/Quote]
能够实现了,但是速度很慢。
WWWWA 2011-06-10
  • 打赏
  • 举报
回复
MYSQL的限制

UPDATE house_rent A Inner Join
(SELECT id FROM house_rent where agentId = atId and deleted=FALSE LIMIT 5) b On A.ID=b.ID
SET A.recommend=TRUE
老9 2011-06-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wwwwb 的回复:]
贴建表及插入记录的SQL,及要求结果出来看看
看看能否用SQL语句解决
[/Quote]

经纪人,发布房产信息,一个表是出租,一个是出售,现在我要把采集的数据,每个经纪人的最新的房产信息的前5条记录更新为推荐,既:recommend设置为true。
wwwwb 2011-06-10
  • 打赏
  • 举报
回复
想修改每种分类的最新的5条数据:agentId 唯一,以什么 标准来判断是最新分类

贴建表及插入记录的SQL,及要求结果出来看看
老9 2011-06-10
  • 打赏
  • 举报
回复
两种方法:

第一种:
UPDATE house_rent a, (SELECT id FROM house_rent where agentId = atId and deleted=FALSE LIMIT 5) b
set a.recommend=TRUE
where a.id=b.id

Time: 989.140ms

第二种

UPDATE house_rent A Inner Join
(SELECT id FROM house_rent where agentId = atId and deleted=FALSE LIMIT 5)T On A.ID=T.ID
SET A.recommend=TRUE

Time: 1033.937ms
数据量不是的很多,修改4k多条数据。谢谢大家的帮助,今天结贴。
wwwwb 2011-06-10
  • 打赏
  • 举报
回复

贴建表及插入记录的SQL,及要求结果出来看看
看看能否用SQL语句解决
老9 2011-06-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 acmain_chm 的回复:]
select * from house_rent A Inner Join
(SELECT id FROM house_rent where agentId = atId and deleted=FALSE LIMIT 5)T On A.ID=T.ID

的速度如何?ID是不是主键? SELECT id FROM house_rent where agentId = atId and de……
[/Quote]

id是主键。
然后两种运行的速度都差不多,既有几毫秒的差别。
ACMAIN_CHM 2011-06-10
  • 打赏
  • 举报
回复
select * from house_rent A Inner Join
(SELECT id FROM house_rent where agentId = atId and deleted=FALSE LIMIT 5)T On A.ID=T.ID

的速度如何?ID是不是主键? SELECT id FROM house_rent where agentId = atId and deleted=FALSE LIMIT 5的速度如何?

如果很慢,则贴出
explain select * from house_rent A Inner Join
(SELECT id FROM house_rent where agentId = atId and deleted=FALSE LIMIT 5)T On A.ID=T.ID
的分析结果。
回南山种豆 2011-06-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lxq19851204 的回复:]
改成这个试一下

SQL code
UPDATE house_rent A Inner Join
(SELECT id FROM house_rent where agentId = atId and deleted=FALSE LIMIT 5)T On A.ID=T.ID
SET A.recommend=TRUE
[/Quote]

+1
rucypli 2011-06-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lxq19851204 的回复:]
改成这个试一下

SQL code
UPDATE house_rent A Inner Join
(SELECT id FROM house_rent where agentId = atId and deleted=FALSE LIMIT 5)T On A.ID=T.ID
SET A.recommend=TRUE
[/Quote]1
ACMAIN_CHM 2011-06-09
  • 打赏
  • 举报
回复
UPDATE house_rent a, (SELECT id FROM house_rent where agentId = atId and deleted=FALSE LIMIT 5) b
set a.recommend=TRUE
where a.id=b.id
lxq19851204 2011-06-09
  • 打赏
  • 举报
回复
改成这个试一下
UPDATE house_rent A Inner Join 
(SELECT id FROM house_rent where agentId = atId and deleted=FALSE LIMIT 5)T On A.ID=T.ID
SET A.recommend=TRUE
老9 2011-06-09
  • 打赏
  • 举报
回复
坐等啊。哪位大虾指导指导我啊。
急!!!!!!!!!!!!!!!!!!!

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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