2012-07-13 32 views
9

Ben bükülmüş piton bu iki sorgu birleştirmek çalışıyorum: Tek bir sorgu içineMySQL: return güncellenen satırlar

UPDATE table SET time = 0 WHERE group_id = 1013 and time > 100 

:

SELECT * FROM table WHERE group_id = 1013 and time > 100; 

ve. Bunu yapabilmek mümkün mü?

SELECT'i bir alt sorguya koymayı denedim, ancak tüm sorgunun istediğimi geri döndürdüğünü sanmıyorum.

Bunu yapmanın bir yolu var mı? (daha da iyisi, bir alt sorgu olmadan) Yoksa iki sorgu ile uğraşmak zorunda mıyım?

Görünüşe MySQL tek satır güncelliyoruz, özellikle kullanım olabilir bir şey var mı,

+2

Bunlar kavramsal olarak aynı veritabanı sunucusu üzerinde aynı anda sorgu yürütülmesi için sorar iki farklı eylem. Bir şekilde onları birleştirerek ne kazanmaya çalışıyorsunuz? – Wiseguy

+0

Ağır yükleri ele alacağından, sorgum mümkün olduğunca hızlı bir şekilde yapmaya çalışıyorum. –

+1

Peki, bu sorguları birleştiremezsiniz. Hızı optimize etmek için, tablolarınızı doğru bir şekilde dizine eklediğinizden emin olun. ['EXPLAIN'] (http://dev.mysql.com/doc/refman/5.5/en/using-explain.html), optimizasyon gerektiren şeyleri size bildirmede yardımcı olacaktır. – Wiseguy

cevap

3

Bu sorguları doğrudan birleştiremezsiniz. Ancak, her iki soruyu da yürüten saklı yordam yazabilirsiniz. örnek:

delimiter | 
create procedure upd_select(IN group INT, IN time INT) 
begin 
    UPDATE table SET time = 0 WHERE group_id = @group and time > @time; 
    SELECT * FROM table WHERE group_id = @group and time > @time; 
end; 
| 
delimiter ; 
+3

UPDATE sonra Squall Leohart'ın döndürmesini istediği satırlarda zaman = 0 var, bu nedenle koşul süresiyle SELECT beklendiği gibi çalışmaz. – md2perpe

5

Quan teşekkür ederim. http://lists.mysql.com/mysql/219882

UPDATE mytable SET 
mycolumn = @mycolumn := mycolumn + 1 
WHERE mykey = 'dante'; 

SELECT @mycolumn; 

olsa bu hiç denemedim, ama bana almak nasıl bildirin yapmak:

Bu örnek değil.

+0

Teşekkürler, ama birden çok satır döndürmek istiyorum –

2

Peki ne yapmaya çalıştığını sıfırlanır time Eğer bir satır eriştiklerinde sıfıra - tür bir tetikleyici gibi ama MySQL SELECT sonra tetikler yapamaz.

Uygulamadan tek bir sunucu isteği ile bunu yapmanın en iyi yolu, güncelleştiren ve sonra satır döndüren bir saklı yordam yazmaktır. İkisinin birlikte olması çok önemliyse, iki ifadeyi bir işlemde sarın.

1

Orada güncellenen satır dönüşü daha hızlı bir versiyonudur ve son derece yüklü bir sistem ile uğraşırken daha doğru

update table_name WITH (UPDLOCK, READPAST) 
SET state = 1 
OUTPUT inserted. 
+1

Bunun sadece MS SQL'de çalıştığına inanıyorum. Gönderi MySQL ile ilgiliydi. – PromInc

İlgili konular