我想实现的功能很简单
例如表A
有字段id,a,b
里面有3条数据
id a b
1 求 助
2 一 个
3 存储 过程当我使用 select * from A where id=2
除了要返回 “2” “一” “个”
还要返回 “1” “求”
还要返回 “3” “存储” 即返回当前搜索数据的上一条和下一条。
我用的是 mysql 5.0
例如表A
有字段id,a,b
里面有3条数据
id a b
1 求 助
2 一 个
3 存储 过程当我使用 select * from A where id=2
除了要返回 “2” “一” “个”
还要返回 “1” “求”
还要返回 “3” “存储” 即返回当前搜索数据的上一条和下一条。
我用的是 mysql 5.0
写个存储过程来找最近的记录!!也就是说要找到ID=2之前有多少条记录。
比如:select count(*) into @cnt from A where id < 2;set @stmt = concat('select * from A where limit ',@cnt-1,',3');
prepare s1 from @stmt;
execute s1;
drop prepare s1;
set @stmt = @cnt = NULL;
能写个完整SQL语句给我吗,谢谢了
CREATE TABLE `a` (
`id` int(4) NOT NULL auto_increment,
`a` varchar(4) collate utf8_bin NOT NULL default 'o',
`b` varchar(4) collate utf8_bin NOT NULL default 'o',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=4 ;INSERT INTO `a` VALUES (1, 'o', 'o');
INSERT INTO `a` VALUES (2, 'o', 'o');
INSERT INTO `a` VALUES (3, 'o', 'o');
找不到了。我给你写一个吧。create table id ( id int not null auto_increment primary key);
insert id values (NULL);
插入数据过程。
....第一种情况select * from id where id in (2-1,2,2+1);
query result
id
1
2
3 第二种情况。
我们干条数据。
delete from id where id >2 limit 4;
表里数据:
query result
id
1
2
7
63
64现在要得到上一条和下一条,看这个SPROC.delimiter ||
create procedure sp_get_id(IN f_id int)
begin
select count(*) into @cnt from id where id < f_id;
set @stmt = concat('select * from id limit ',@cnt-1,',3');
prepare s1 from @stmt;
execute s1;
drop prepare s1;
set @stmt = @cnt = NULL;
end||
delimiter ;调用存储过程
call sp_get_id(2);
query result
id
1
2
7 你可以传你需要的值进去。
不知道有没时间帮我解决,我给你加分!有一个存储图片的表a
字段有3个:
id(自加一主键)
name
url
我想实现的是
当插入数据时url以id+".jpg"来保存。
请问怎么实现?
如果truncate table 后,这个last_insert_id()不能立即还原。
因此用触发器会出现问题。最好的办法就是在程序端处理,保留ID,然后就可以在插入的时候进行显式的组合了。
假设表名tb_urlDELIMITER $$CREATE
TRIGGER `tr_test` BEFORE INSERT
ON `tb_url`
FOR EACH ROW BEGIN
flush tables;
set NEW.url = concat(NEW.id,'.jpg');
END$$DELIMITER ;
否则就隔上一段时间UPDATE一下表吧。
update tb_url set url = concat(id,'.jpg');
先 insert 再 select id 最后 update set(url)3步?
我现在就是这样做的,感觉3次操作数据库太繁琐了。
是先 insert 再 select id 最后 update set(url)3步?
还是其他?
说明白点
谢谢
第一个问题也可以用
select id from lsb1 where id<2 order by id desc limit 1
union
select id from tt where id=2
union
select id from tt where id>2 order by id asc limit 1
关于那个图片的表我用的就是AUTO_INCREMENT
如果不能用存储过程就用union好了
从小->大的顺序