Gytyonline
مديريت كل انجمنها
پست: 899
عضو شده در: 14 شهریور 1384
محل سکونت: tehran
امتياز: 8184
|
عنوان: طریقه به روز رسانی انواع فیلدها در mysql |
|
|
سلام
حتما تاحالا خیلی برای شما هم پیش اومده که در اسکریپتهایی که مینویسید قسمت ویرایش هم قرار داده باشید برای برنامه خودتون، همون طوری که خودتون میدونید برای به روز رسانی کردن یک فیلد در mysql از کوئری زیر استفاده میکنیم:
کد: |
update Table_Name set Field=New_Value where .... |
و این دستور میادش و فیلد مورد نظر ما رو با مقدار جدیدی که براش در نظر گرفتیم به روز رسانی میکنه.
تا اینجای کار ساده بود اما خوب اگر فرض کنیم که data type فیلد ما از نوع عددی باشه ( صحیح، اعشار و ... ) و ما بخواییم مقدار اون رو به روز رسانی کنیم اما به این گونه که مقداری رو به مقدار قبلی اون فید اضافه کنیم، مثلا میخواییم فیلدی رو که عدد تعداد نمایش یک پست رو در خودش نگه داری میکنه رو به روز رسانی کنیم در این صورت با هر بار دیده شدن اون پست باید مقدار قبلی فیلد با عدد یک جمع بشه و دوباره تو خودش ذخیره سازی بشه و به روز رسانی بشه و ما برای به روز رسانی اون به مقدار قبلیش هم وابسته هستیم، خوب برای این نوع از به روز رسانی باید چی کار کنیم؟
باید بار اول درخواست بفرستیم به پایگاه داده و مقدار اون فیلد رو بدست بیاریم و بعد با php یک مقدار به اون اضافه کنیم و دوباره یه درخواست به پایگاه داده بفرستیم و مقدار جدید رو با همون دستور اولی update که گفتیم به روز رسانی کنیم؟!
مسلما این راه، راه بهینه و مناسبی نیستش و ما باید هدفمون این باشه که تا جایی که ممکن هستش از ایجاد و ارسال درخواستهای بیهوده به سمت سرور و دیتابیس جلوگیری کنیم تا کدی بهینه و اصولی داشته باشیم اما خوب بهترین راه حل این مسئله چی هست؟
بهترین و اصولی ترین راه این کار استفاده از توابع خود mysql هستش، و با به جای اینکه از دو query برای این کار استفاده کنیم ( یکی select برای بدست اوردن مقدار اولی و دیگری update برای به روز رسانی مقدار جدید فیلد ) میتونیم از query زیر استفاده کنیم:
کد: |
update Table_Name set Field=(Filed+Value) where .... |
و به جای value مقدار عدد مورد نظر خودمون رو قرار بدیم.
اما خوب حالا اگر data type فیلد ما عددی نبودش و کاراکتری بودش چی؟ اون موقع تکلیف چیه؟
مثلا ما فیلدی داریم که توش این نوشته ذخیره شده "Aftabgardan Cultural" و ما می[واییم مقدار "Center" رو به انتهای اون اضافه کنیم، شاید پیش خودتون بگید خوب از همون درستور اولی استفاده میکنیم و کل رشته رو یکجا به فیلد میدیم! اما خوب بعضی وقتا مقدار قبلی رو نداریم و وابسته هستیم به اون مثل مثال به روز رسانی تعداد بازدید پست و باید حتما در همون لحظه مقدار قبلی فیلد رو از دیتابیس به دست بیاریم. خوب پس حالا باید چی کار کنیم؟ باز هم میتونیم از روش دومی که گفته شد استفاده کنیم؟!
جواب : خیر، اگر به روشی که بالا گفتیم برای data type های کاراکتری استفاده کنید مقدار 0 در فیلد شما ذخیره سازی میشه! برای این کار شما باید به روش زیر عمل کنید و از تابع concat() استفاده کنید:
کد: |
update Table_Name set field=CONCAT(field,'new string') where ... |
تابع contact() از توابع mysql هستش ، و در اینجا ما بهش دو تا آرگومان میدیم که آرگومان اولی اسم فیلدی هستش که میخواییم به روز بشه و مقداری رو به انتهای اون اضافه کنیم و آرگومان دوم رشتهای هستش که میخواییم به انتهای اون فیلد اضافه بشه و به این شکل دیگه نیازی به استفاده از دو query و راه های دیگه نیست.
تابع concat()کاربردهای دیگهای هم داره که در آینده با هم بررسی میکنیم.
موفق باشید.
امین شفیعی; |
|