PDA

View Full Version : حرفه ای: آپدیت رکورد هایی که فیلد دیتا آن شامل عدد هایی مثل (1 و 2 و 3 ) باشند ( مقدار فیلد : 1,22,2)



$ M 3 H R D A D $
جمعه 26 آبان 1391, 23:14 عصر
سلام من تو جدول بلوک ( باکس چپ و راست ) آیدی صفحاتی که باید تو اون باکس نشون بده و نگه می دارم با
کاما از هم جدا می کنم

حالا اگه صفحه پاک شد باید آیدی اون صفحه تو همه رکورد های جدول باکس پاک بشه
یعنی باید و هر رکورد FIND_IN_SET رو انجام بدم با (تک تک ) آیدی های صفحات تا اگه تو اون فیلد اون شماره آیدی صفحه هاست بعدش عمل آپدیت و انجام بده ( اون شماره و حذف کنه و بقیه و با کاما به هم بچسبونه )
سخت شد یکم : دی

plague
شنبه 27 آبان 1391, 00:53 صبح
من که نفهمیدم چی پرسیدی ولی اگه میخای آیدی اون صفحه از توی فیلد که آیدی ها رو به صورت استرینگ ذخیره کرده پاک کنید اینجوری بنویس
مثلا آیدی 3 حذف شده

update table set fild = REPLACE( fild ,',3','')

$ M 3 H R D A D $
شنبه 27 آبان 1391, 01:50 صبح
1,2,3,345,333
کدوم و پاک میکنه ؟

$ M 3 H R D A D $
شنبه 27 آبان 1391, 01:58 صبح
روش و میدونم اما نمیتونم جمع و جورش کنم آخه چند روزی نخوابیدم درست درمون
با دستور find_in_set میشه فهمید یه متن تو رشته هست یا نه
و میاد پوزیشن اون رشته و تو متن میده که اگه 0 نبود یعنی تو متن هست
اگه 1 بود یعنی اول متنه
اگه 1 نبود یعنی وسطه یا آخر
حالا باید قبل و بعد اون متن مورد جستجو ( فقط خودش ) باید دوتا کاما باشه چپ و راستش
یعنی طول متن مورد جستجو + پوزیشن = ؟ کاراکتر ایندکس ؟ باید کاما باشه و همچنین پوزیشن منها یک ( سمت چپ جمله ) هم باید کاما باشه یا خالی ( یعنی منها که می کنی 0 بشه یعنی اول جمله )
حالا به همین داستان باید اونو پاک کنی و هم خودش هم کاما ها و پاک کنی تا اون متن قبلی دوباره فرمت درست بگیره

مشکل دیگه اینکه من با دستور in کار میکنم
یعنی مثلا یک آیدی 3 و جستجو نمیکنم ممکنه چندتا باشه که فک کنم با همون where جمله حل بشه یا شایدم نشه : دی

plague
شنبه 27 آبان 1391, 10:30 صبح
1,2,3,345,333
کدوم و پاک میکنه ؟
3,
رو پاک میکنه از توی رشته
در واقع با فضای خالی جایگزینش میکنه
یبار تست کن ببین چجوری میشه حالا

rezaonline.net
شنبه 27 آبان 1391, 11:40 صبح
والا تنها چیزی که میتونم بگم اینه که اون قسمت دیتابیس رو اینجوری ننویسی .

$ M 3 H R D A D $
شنبه 27 آبان 1391, 20:17 عصر
همه 3 هارو پاک میکنه
من نوشتم این قسمت و خیلی جحاها دیدم این سبک استفاده کینند
البته انقدر رکورد زیاد نیست
میشه همه و که 3 توش میبینه بیارم تو آرایه ایپلود و اکسپلود کنم و آپدیت

plague
شنبه 27 آبان 1391, 23:11 عصر
نه همونطور که دوستمون گفت بهتره که اینطوری ننویسی
اگه میخای اینطوری کار کنی پس باید یه حد شروع و پایان بزاری که بتونی از این روشی که من گفتم استفاده کنی
مثلاالان تو تیبل
اینو داری

1,3,34,321

وقتی

update table set fild = REPLACE( fild ,',3','')

استفاده کنی همه
,3
ها پاک میشن که حتی اونایی که 3 نیست مقدارشون و فقط با 3 شروع میشن
برای حل این مشکل باید اینطوری ذخیره کنی مثلا


,1#,3#,34#,321#
اینطوری دیگه فرق اونی که 3 مقدارش و اونی که فقط با 3 شروع میشه مشخصه و اونا اشتباهی پاک نمیشن و شما کوئریتو ایجوری مینویسی



update table set fild = REPLACE( fild ,',3#','')

rezaonline.net
یک شنبه 28 آبان 1391, 02:40 صبح
اینا رو ول کن
چون میدونستم معادل implode پی اچ پی توی mysql یک تابع داریم group_concat
حالا معادل explodeاش رو هم برات پیدا کردم که بری حالشو ببری
فقط کارکردنش با خودت
http://stackoverflow.com/questions/471914/can-you-split-explode-a-field-in-a-mysql-query

$ M 3 H R D A D $
دوشنبه 29 آبان 1391, 07:09 صبح
اوووخ یادم رفت بگم :ی من حد اکثر 7 تا آیدی و با هم جمع می کنم تو یک فیلد یعنی 7 تا آیدی با کاما وصل شده