PDA

View Full Version : سوال: جمع مقدار اولين سطر تا سطر فعلي



h_mohamadi
شنبه 23 فروردین 1393, 16:50 عصر
سلام

من یک تیبل دارم با چهار تا فیلد كه از طريق انجام عمليات پردازش برروي ساير جداول خود اطلاعات سه ستون آن را پر كردم حالا براي پركردن اطلاعات ستون چهارم نياز به يك كوئري دارم
تا اطلاعات ستون sum در هر سطر برابر با مقدار اولین سطر تا سطر فعلی ستون value بشه
البته مي تونم اين كار رو با انجام آپديت براي هر سطر با كوئري هاي جداگانه انجام بدم اما مي خواهم اين كار فقط توسط يك كوئري ساده انجام بشه تا سرعت آپديت در زماني كه تعداد سطرهاي داده زياد است بالا برود
با تشکر

117889117890

us1234
شنبه 23 فروردین 1393, 18:27 عصر
دو روش من برای این کار بلدم :
روش اول :


select
* , (select sum(`value`) as n from a WHERE id <= t.id) as sums
from tbl AS t

روش دوم :


SELECT *,@total := @total + `value` as sums
FROM tbl, (SELECT @total:= 0) as dummy
ORDER BY id;



سعی کن از کلمات تعریف شده و رزو شده اسکیوال برای نام گذاری نام جدول ها و ستون ها استفاده نکنی . بجز آی دی بقیه نام ها کلمه های تعریف شده در اسکیوال می باشد .

h_mohamadi
یک شنبه 24 فروردین 1393, 10:01 صبح
دو روش من برای این کار بلدم :
روش اول :


select
* , (select sum(`value`) as n from a WHERE id <= t.id) as sums
from tbl AS t

روش دوم :


SELECT *,@total := @total + `value` as sums
FROM tbl, (SELECT @total:= 0) as dummy
ORDER BY id;



سعی کن از کلمات تعریف شده و رزو شده اسکیوال برای نام گذاری نام جدول ها و ستون ها استفاده نکنی . بجز آی دی بقیه نام ها کلمه های تعریف شده در اسکیوال می باشد .

ممنون از راهنمايي تون
فقط يه سوال :
به نظرتون براي داده هايي با حجم بالا سرعت پردازش روش اول بيشتر است يا روش دوم
آخه در جدول من تعداد ستون هام 10 تاست و اطلاعات اين جدول رو از پردازش اطلاعات دو جدول ديگه بدست مي آرم و مي خواهم اين كوئري رو با كوئري اي كه دارم يكي كنم يعني همزمان كه دارم اطلاعات رو پردازش مي كنم جمع از اولين مقدار تا سطر فعلي رو هم انجام بدم
به نظر شما هر عمليات رو جداگانه انجام بدم يا همه عمليات رو همزمان انجام بدم

us1234
یک شنبه 24 فروردین 1393, 13:58 عصر
ممنون از راهنمايي تون
فقط يه سوال :
به نظرتون براي داده هايي با حجم بالا سرعت پردازش روش اول بيشتر است يا روش دوم
آخه در جدول من تعداد ستون هام 10 تاست و اطلاعات اين جدول رو از پردازش اطلاعات دو جدول ديگه بدست مي آرم و مي خواهم اين كوئري رو با كوئري اي كه دارم يكي كنم يعني همزمان كه دارم اطلاعات رو پردازش مي كنم جمع از اولين مقدار تا سطر فعلي رو هم انجام بدم
به نظر شما هر عمليات رو جداگانه انجام بدم يا همه عمليات رو همزمان انجام بدم

در خصوص بهینه بودن روش دوم بهینه تر است و سرعت به نسبت ( خیلی محسوس نیست ) بالاتری داره ( بخاطر استفاده نشدن از تابع sum و where) .
اگه بتونید این کوئری را با کوئری قبلیتان یکی کنید بهینه تر است .
در کل هرچه تعداد کوئری های شما و کانکت شدن به دیتابیس کم بشه سرعت بالا تر میرود.