PDA

View Full Version : insert در بانک با شرط نبودن رکورد مورد نظر



blue.web9
یک شنبه 27 مهر 1393, 22:59 عصر
سلام...
داخل stackoverflow چندتا جواب پیدا کردم ولی نتونستم استفاده کنم...فرض کنیم این جدول باشه :



mobile
tell
id


0911
222
1


0936
333
2




من میخوام در صورتی که شماره موبایل 0911 وجود نداره یک رکورد جدید اینسرت کنم و اگه بود اینسرت نشه..در کل میخوام بدونم ایسنرت با شرط چطوریه ؟
ممنون میشم راهنماییم کنید.

bagherok
یک شنبه 27 مهر 1393, 23:30 عصر
1:
اگه کلید اصلی (primary key)
و ازقبل وجود داشته باشه
اینسرتی صورت نمیگیره وerror میده

2: ولی با IGNORE اینسرت نمیشه وerror ای هم نمیده

INSERT IGNORE INTO A (id, tell,mobile) VALUES (val1, val2,value3)

3:میتونی شرط بذاری روی هرکدوم از فیلدها .حالا کلید اصلی باشه و نباشه فرقی نمیکنه

INSERT INTO A (id, tell,mobile) VALUES (val1, val2,value3) ON DUPLICATE KEY UPDATE mobile=mobile;

cpuram
یک شنبه 27 مهر 1393, 23:58 عصر
1:
اگه کلید اصلی (primary key)
و ازقبل وجود داشته باشه
اینسرتی صورت نمیگیره وerror میده

2: ولی با IGNORE اینسرت نمیشه وerror ای هم نمیده

INSERT IGNORE INTO A (id, tell,mobile) VALUES (val1, val2,value3)

3:میتونی شرط بذاری روی هرکدوم از فیلدها .حالا کلید اصلی باشه و نباشه فرقی نمیکنه

INSERT INTO A (id, tell,mobile) VALUES (val1, val2,value3) ON DUPLICATE KEY UPDATE mobile=mobile;

اینطوری نمیفهمه علت insert نشدن چی بود.بهتره اول یه select از جدول داشته باشه بعدش چک کنه توش هست یانه اگه نبود insert کنه.نظر شما چیه؟

blue.web9
دوشنبه 28 مهر 1393, 08:41 صبح
1:
اگه کلید اصلی (primary key)
و ازقبل وجود داشته باشه
اینسرتی صورت نمیگیره وerror میده

2: ولی با IGNORE اینسرت نمیشه وerror ای هم نمیده

INSERT IGNORE INTO A (id, tell,mobile) VALUES (val1, val2,value3)

3:میتونی شرط بذاری روی هرکدوم از فیلدها .حالا کلید اصلی باشه و نباشه فرقی نمیکنه

INSERT INTO A (id, tell,mobile) VALUES (val1, val2,value3) ON DUPLICATE KEY UPDATE mobile=mobile;

ممنون ولی دستور شما کار نکرد..


اینطوری نمیفهمه علت insert نشدن چی بود.بهتره اول یه select از جدول داشته باشه بعدش چک کنه توش هست یانه اگه نبود insert کنه.نظر شما چیه؟
هر بار باید تعداد رکورد زیادی insert بشه ، اگه بخوام اول سلکت کنم سرعت پایین میاد....میخوام ببینم با یک کوئری مییتونم insert با شرط انجام بدم

bagherok
دوشنبه 28 مهر 1393, 08:46 صبح
ممنون ولی دستور شما کار نکرد..


ارور داد...

این دستورات دیگه چیزخاصی نداره که کارنکنه

blue.web9
دوشنبه 28 مهر 1393, 09:07 صبح
ارور نداد دوست عزیز ، update میکنه ، یعنی شماره موبایل update میکنه ، من میخوام اگه شماره موبایل مثلا 0911 بود insert نشه و اگه نبود insert بشه

mostafa272
دوشنبه 28 مهر 1393, 12:37 عصر
ببینید به این فرم جواب میده:




INSERT INTO x_table(id, tell, mobile) SELECT $id , $tell, $mobile WHERE NOT EXISTS (SELECT * FROM x_table WHERE mobile =0911 )

blue.web9
دوشنبه 28 مهر 1393, 12:57 عصر
این کوئری هم جواب نداد..

thacker
دوشنبه 28 مهر 1393, 13:26 عصر
$Query = mysql_query ("SELECT `mobile` FROM `table` WHERE `mobile` = '".$mobile."'");
$count = mysql_num_rows($Query);

if($count>0) {
$message = 'این شماره موبایل قبلا در سامانه ثبت شده است.';
} else {
$add = mysql_query ("INSERT INTO `table` VALUES ('', '$tell', '$mobile')");
$message = 'ثبت با موفقیت انجام شد.';
}

blue.web9
دوشنبه 28 مهر 1393, 14:00 عصر
دوست عزیز من میخوام برای افزایش سرعت از یک کوئری استفاده کنم ، چون تعداد رکورد های که تو هر دقیقه insert میکنم خیلی بالاست..

cpuram
دوشنبه 28 مهر 1393, 15:24 عصر
دوست عزیز من میخوام برای افزایش سرعت از یک کوئری استفاده کنم ، چون تعداد رکورد های که تو هر دقیقه insert میکنم خیلی بالاست..

شما هنوز برنامه رو نساختید درگیر پرفرمنسش هستین؟ اول کارو تموم کنید بعدش اگه دیدید داره کم میاره برید سراق تقویت برنامه.یه select ساده که پرفرمنس پایین نمیاره کل DB رو که نمیکشید بیرون چون توش از WHERE استفاده میشه و فقط دنبال یک مقدار هستید.

captain_hamid
دوشنبه 28 مهر 1393, 16:01 عصر
بهترین راه فک میکنم این باشه که اول شما یک select از همه موبایل ها بگیرید و بعدش بریزین تو یک آرایه.
حالا برای insert اول شماره رو تو آرایه چک کنید اگه بنود به دستور insert اضافه کنید.
این شماره ها که می خوان insert بشه رو از یک فرم میگیرین؟

nazanin_asadi_1
دوشنبه 28 مهر 1393, 18:27 عصر
ساختار جدول شما برای کارهای کوچک که نیازی به وقت گذاشتن نداره و سر سری میخوان رد بشن خوبه
ولی
برای کارهای دیگه مناسب نیست که شما شماره موبایل و شماره های دیگه رو توی یک رکورد برای هر شخص ثبت کنید

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

نتیجه این ساختار میشه این که شما یک شماره رو ثبت میکنی با کلی رابط که ممکنه اون شماره برای یکی شماره خانه باشه برای یکی دیگه شماره فکس یا هر چی که خودش ثبت میکنه
و راحت میتونی با داشتن یک شماره بفهمی که این شماره برای چه کسایی با چه عنوان هایی ثبت شده
هر کاربر هم اگه خواست شماره رو پاک کنه عملا نمی ری رکورد مربوطه رو پاک کنی اگه خواستی رابط بین شماره و شخص رو پاک میکنی ( یا بهترش اینه که یه فیلد هم برای جدول رابط ایجاد بکنی که وضعیت حذف شده رو براش نشون بدی اگه true بود یعنی حذف شده اگه false بود یعنی شماره برای کاربر ثبت شده اینجوری موقع نمایش شماره ها برای کاربرها اونهایی که مقدارشون false رو نشون میدی و خودت که خواستی شماره ها رو ببینی هر دو تا رو می تونی ببینی

blue.web9
دوشنبه 28 مهر 1393, 18:56 عصر
ممنون که راهنمایی می کنید...این جدول مثال زدم و ساختار جدول این نیست و مسایلی که شما گفتید تقریبا رعایت کردم ، الان با یه select و insert کارمو انجام میدم..فقط کنجکاو بودم ببینم میشه با یه کوئری insert و با شرط انجام بدم یا نه ؟

rezakho
دوشنبه 28 مهر 1393, 22:18 عصر
چرا از تابع یا استورپروسیجر استفاده نمیکنید، دستتون خیلی بازتره!