• 3 رای - 4.33 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در حذف رکورد ( بخش ، مجموعه ، زیر مجموعه)
#11
حقیقتش رو بخواید من توی یک پروژه همین 2 هفته پیش با همچین چیزی برخورد کردم، خیلی ساده با 2 خط کد PHP حل کردم قضیه رو، بدون trigger و ... . نمیدونم چرا انقدر حساسیت به خرج میدین.
  پاسخ
تشکر شده توسط :
#12
بله در mysql هم هست خودم دارم بیشتر بررسی میکنم فعلا اینجا جوابی به عنوان راه حل داده نشده بازم ممنونم.

اگر دوستی راه حل خوبی داره خوشحال میشم کمکم کنه.Exclamation

(۱۳۹۲ فروردین ۰۶, ۰۱:۰۹ ب.ظ)behz4d نوشته: حقیقتش رو بخواید من توی یک پروژه همین 2 هفته پیش با همچین چیزی برخورد کردم، خیلی ساده با 2 خط کد PHP حل کردم قضیه رو، بدون trigger و ... . نمیدونم چرا انقدر حساسیت به خرج میدین.

دوست عزیز خوشحال میشم این دو خط کد رو ببینم و یا کمک کنی استفاده کنم چون این قضیه داستان داره!!!!!!
TongueBig GrinShy
  پاسخ
تشکر شده توسط :
#13
بیا آقا جون پیداش کردم.Idea
همون راهی که گفتم توی MSSQL میای و از یه جدول به خودش relation میدی را برای MySQL هم در آوردمSmile. به این کدها یه نگاهی بندازید، باید کمکتون کنه:
http://www.sqlfiddle.com/#!2/c8a3e/1
سالهــــا مـــــى گــــــذرد، حادثه ها مى آید
انتظـــــار فـــــــرج از نیمـــــه خــــــرداد کشم

[عکس: ShowPicture.aspx?ID=52750d12-5d92-4286-9...height=100]
  پاسخ
تشکر شده توسط :
#14
خب به نظر من کلن درست نیست که از این روش استفاده کنید
شما با mysql اگر این کارو بکنید و فردا بخواید از یه دیتابیس دیگه استفاده کنید به مشکل بر می خورید

همون روشی که دوستان گفتن (چک کردن) بهتره به نظر من
همه جوره اش رو داریم ظاهرن
  پاسخ
تشکر شده توسط : masoud1990
#15
اون 2 خط کد خیلی سادست! کجاش داستان داره؟؟
فرض کنید شما دریافت کردید که باید row با id=4 پاک بشه:
کد پی‌اچ‌پی:
<?php
    
// DELETE ROW with ID = 4
    // let's see if it's the man cat or not:
    
$check_main_cat mysql_query("SELECT COUNT(id) FROM set WHERE id = 4 AND parent = 0");
    
$count_parent mysql_fetch_array($check_main_cat);
    
$count_parent $count_parent['COUNT(id)'];
    if(
$count_parent == 1){
        
// It's MAIN CAT
        // First, delete the subcats related to this main cat
        
$delete_sub_cats mysql_query("DELETE FROM set WHERE parent = '4'");
        
// Now delete the row itself
        
$delete mysql_query("DELETE FROM set WHERE id = '4'");
    }else{
        
// It's NOT main cat, just delete the row with id = 4
        
$delete mysql_query("DELETE FROM set WHERE id = '4'");
    }

?>
  پاسخ
تشکر شده توسط : masoud1990 pary_daryayi
#16
(۱۳۹۲ فروردین ۰۶, ۰۵:۴۵ ب.ظ)behz4d نوشته: اون 2 خط کد خیلی سادست! کجاش داستان داره؟؟
فرض کنید شما دریافت کردید که باید row با id=4 پاک بشه:
کد پی‌اچ‌پی:
<?php
    
// DELETE ROW with ID = 4
    // let's see if it's the man cat or not:
    
$check_main_cat mysql_query("SELECT COUNT(id) FROM set WHERE id = 4 AND parent = 0");
    
$count_parent mysql_fetch_array($check_main_cat);
    
$count_parent $count_parent['COUNT(id)'];
    if(
$count_parent == 1){
        
// It's MAIN CAT
        // First, delete the subcats related to this main cat
        
$delete_sub_cats mysql_query("DELETE FROM set WHERE parent = '4'");
        
// Now delete the row itself
        
$delete mysql_query("DELETE FROM set WHERE id = '4'");
    }else{
        
// It's NOT main cat, just delete the row with id = 4
        
$delete mysql_query("DELETE FROM set WHERE id = '4'");
    }

?>

پسر خوب داستان داره الان توضیح میدم فقط کافیه اینو خودت اجرا کنی که مطمئناً اجرا کردی فقط باید اینو متوجه باشی که کد شما فقط اونایی رو داره پاک میکنه که مثلا ID =4 و تمام رکورد هایی که Parent = 4 هستند در صورتی که بازم به سوالم توجه نکردی این ساختار درختی است و بازم اگه خود اونایی که parent اونها مساوی یکی از id های حذف شده که Parent = 4 باشند هنوز در جدول باقی میمونند اینو میتونی خودت چک کنی یا حتی سطوح بیشتری بزاری تا متوجه بشی منظورم چیه.

در صورتی که کد شما فقط دو سطح رو مورد بررسی قرار میدهد و یا پاک میکند یعنی تمام رکورد هایی که id اونا 4 هست و تمام رکورد هایی که پدرشون 4 هست در صورتی که فرزندان این رکورد ها باقی موندن که در بالا توضیح دادم
  پاسخ
تشکر شده توسط :
#17
مرسی که بهم گفتی پسر خوب Heart
من فکر کردم تا 2 تا level بیشتر نمی‌خوای بری... .
اینجارو یه نیگا بنداز:
Handling Hierarchical Data in MySQL and PHP
  پاسخ
تشکر شده توسط :
#18
(۱۳۹۲ فروردین ۰۶, ۰۶:۴۵ ب.ظ)behz4d نوشته: مرسی که بهم گفتی پسر خوب Heart
من فکر کردم تا 2 تا level بیشتر نمی‌خوای بری... .
اینجارو یه نیگا بنداز:
Handling Hierarchical Data in MySQL and PHP

این لینک رو هم دیده بودم ساختار این جدول بصورت Leaf (برگ) بررسی شده و به کار راحت و ساده من در جدول فقط شباهت ظاهری داده ها رو داره نه ساختار یعنی اومده مثل لیست پیوندی کار کرده که لزومتی نداشته اگه فقط مورد نیازش حالت درختی باشه مثل من (پدر و فرزندی).

دیدی گفتم سوالمو متوجه نشدی و این قضیه داستان داره!!!!!CoolCoolBig Grin

خواستی برای این نوع ساختار اگه برای مدیریتش مشکل داشتی کمک کنم به درک بهترش دوست گرامی. چون ساختار باحالی داره واسه مدیریت.SmileBig Grin
  پاسخ
تشکر شده توسط :
#19
آقا جون همون راهیی که گفتم خوبه خود mysql این کارهای می کنه و شما هیچ دخالتی ندارید.
در بالا هم دوست عزیز، آقای molana گفتند که
نقل قول:«اگر بخواهید دیتابیس را تغییر دهید راه خوبی نیست»
بله بنده هم در صورت وجود چنین شرطی با ایشان موافق هستم، اما چند موضوع:
۱- آیا قراره به راحتی و تند تند دیتابیس برنامه ها تغییر کنند؟ (و اون چه برنامه ای میشه......Sleepy)
۲- اگر این خوب نبود، اصلا چرا این امکان را ایجاد کردند؟ خوب برای همین مواقع درستش کردند دیگه......Rolleyes
۳- در مواردی که مربوط به اطلاعات برنامه می شود، هر چه بار پردازش روی دیتابیس باشه برای performance بهتره.

باز هم اگر عیبی، ایرادی، اشکالی هست، خوشحال میشم بگویید
سالهــــا مـــــى گــــــذرد، حادثه ها مى آید
انتظـــــار فـــــــرج از نیمـــــه خــــــرداد کشم

[عکس: ShowPicture.aspx?ID=52750d12-5d92-4286-9...height=100]
  پاسخ
تشکر شده توسط : molana
#20
(۱۳۹۲ فروردین ۰۷, ۱۱:۱۲ ق.ظ)shgninc نوشته: ۱- آیا قراره به راحتی و تند تند دیتابیس برنامه ها تغییر کنند؟ (و اون چه برنامه ای میشه......Sleepy)
۲- اگر این خوب نبود، اصلا چرا این امکان را ایجاد کردند؟ خوب برای همین مواقع درستش کردند دیگه......Rolleyes
۳- در مواردی که مربوط به اطلاعات برنامه می شود، هر چه بار پردازش روی دیتابیس باشه برای performance بهتره.

موافقم که برای کارای کوچیک و متوسط می شه از تریگر ها استفاده کرد Wink

اما مشکلاتی هم هست:
  • دیباگ کردنش سخته چون سمت سرور اجرا می شه
  • فقط برای sql می تونی ازش استفاده کنی
همه جوره اش رو داریم ظاهرن
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان