2011-03-25 6 views
9

Bir satır eklemek ve aynı sorguya eklenen değerleri almak mümkün mü?MySql: Bir satır ekleyin ve içeriği alın

şey gibi ...

INSERT INTO `items` (`item`, `number`, `state`) 
(SELECT '3', `number`, `state` FROM `item_bug` WHERE `id`='3') 

Ve sonra, kimliği almak ve sadece bir sorgu kullanarak bir

SELECT * FROM `items` WHERE `id`='$id' 

Ama yürütün.

+0

değil gerçekten bir DML sorguda yapılabilir soruyorsun ama eğer görmek için bu soruyu takip ettiğimi emin - bilmek yararlı olacaktır. –

+2

İki sorunda sorun nedir? – JohnFx

+0

Hiçbir şey, aşırı yük dışında .. – Ivan

cevap

4

Eğer insert gerçekleştirmek ve uygulama katmanından tek bir çağrıda bir resultset döndürür saklı bir yordam çağrısı mysql:

Saklı yordam çağrısı

mysql> call insert_user('bar'); 
+---------+----------+ 
| user_id | username | 
+---------+----------+ 
|  1 | bar  | 
+---------+----------+ 
1 row in set (0.02 sec) 

$sqlCmd = sprintf("call insert_user('%s')", ...); 

Basit bir örnek:

drop table if exists users; 
create table users 
(
user_id int unsigned not null auto_increment primary key, 
username varchar(32) unique not null 
) 
engine=innodb; 


drop procedure if exists insert_user; 

delimiter # 

create procedure insert_user 
(
in p_username varchar(32) 
) 
begin 
declare v_user_id int unsigned default 0; 

insert into users (username) values (p_username); 

set v_user_id = last_insert_id(); 

-- do more stuff with v_user_id e.g. logs etc... 

select * from users where user_id = v_user_id; 

end# 

delimiter ; 

call insert_user('bar'); 
+0

Kullanım 2 mysql sorgudan daha yavaş görünüyor, değil mi? – Ivan

+5

arabanıza atlayıp ekmek almak için süpermarkete gidip eve dönüyor, sonra süt satın almak için geri dönmek süpermarkete gitmekten ve ekmek ve süt satın almaktan daha hızlı mı oluyor? Bir ya da iki yolculuk? –

+0

Bu harika! Desteğiniz için teşekkürler! – Luc

5

Hayır, MySQL mümkün değildir (PostgreSQL, SQL Server ve PL/SQLOracle aksine).

Bunu ayrı ayrı sorgularda yapmanız gerekecektir.

0

sonra bunun yerine

son eklenen kaydın id verecektir

mysql_insert_id(); 

kullanabilirsiniz php kullanarak eğer.

Diğer veriler takılı olarak aynı olacaktır.Yalnızca kimlik, mysql_insert_id()

ile alabileceğiniz değişikliği değiştirir. Böylece ikinci sorguyu çalıştırmanıza gerek yoktur.

+0

Evet, teşekkürler, biliyorum, ama bu benim soru değil :) – Ivan

7

ekinizin deyimini yürütün ve sonra yapabileceğiniz bu:

SELECT * FROM `items` WHERE `id`= LAST_INSERT_ID() 
+0

Nasıl bir satır ekler? – Quassnoi

+0

@Quassnoi: Kusur olmasaydım üzgünüm. Beklenti, OP'nin orijinal sorudaki INSERT ifadesini yürütmesidir. Cevabı daha iyi çözeceğim. –

+0

orijinal soru "bir satır eklemek ve aynı sorguya eklenen değerleri almak" için sorar. – Quassnoi