استفاده از if exists در کوئری

greencat

Member
سلام
می‌خواستم بدونم که امکان استفاده از if exists در کوئری‌های Mysql هستش یا نه فقط توی sp امکان استفاده از این ساختار هستش؟ چون من کوئری زیر رو توی phpmyadmin زدم اجرا بشه پیغام syntax error دادش در صورتی که اشتباهی توی طرز نوشتن و syntax اش نیستش.
کوئری که استفاده کردم اینه:
کد:
IF (EXISTS (SELECT id FROM table1 WHERE id = 7))
begin
  select userid from table1 where id=17
end
else
begin
  select userid from table1 where id=18
end

ممنون.
 

greencat

Member
سلام
ممنون از جوابتون اما این رو دیده بودم و به کارم نمیادش من میخوام اگر رکوردی توی جدول a ثبت شده بود مشخصاتش مثل id و غیره ... خوانده بشه و توی جدول B ثبت بشه و اگر اون رکورد توی جدول a ثبت نشده بود اول توی جدول a ثبت بشه و بعدش مشخصاتش مثل id و غیره ... خوانده شده و بعد توی جدول b ثبت بشه که با این چیزی که شما دادید نمیشه.
من خودم از این کوئری استفاده کردم:
کد:
IF (EXISTS (SELECT id FROM tableA WHERE id = 7))
begin
  insert into tableB (name) values ('majidonline')
end
else
begin
  insert into tableA (id) values (7)
  insert into tableB (name) values (majidonline)
end

وقتی دیدم phpmyadmin از این خطای syntax میگیره به کوئری ساده تری که توی پست قبلی دادم تبدیلش کردم که دیدم با خطای syntax میگیره نمیدونم مشکلش از کجا هستش و به ظنرم خود دستورات مشکلی ندارند مگر اینکه ساختار if exists مشکل داشته باشه و mysql این ساختار رو ساپورت نکنه توی کوئری هاش چون دیدم توی sp به این شکل نوشته شده اما توی خود 1 کوئری نه!
نظر شما چیه؟
ممنون.
 

MMSHFE

Active Member
سلام
ممنون از جوابتون اما این رو دیده بودم و به کارم نمیادش من میخوام اگر رکوردی توی جدول a ثبت شده بود مشخصاتش مثل id و غیره ... خوانده بشه و توی جدول B ثبت بشه و اگر اون رکورد توی جدول a ثبت نشده بود اول توی جدول a ثبت بشه و بعدش مشخصاتش مثل id و غیره ... خوانده شده و بعد توی جدول b ثبت بشه که با این چیزی که شما دادید نمیشه.
من خودم از این کوئری استفاده کردم:
کد:
IF (EXISTS (SELECT id FROM tableA WHERE id = 7))
begin
  insert into tableB (name) values ('majidonline')
end
else
begin
  insert into tableA (id) values (7)
  insert into tableB (name) values (majidonline)
end
وقتی دیدم phpmyadmin از این خطای syntax میگیره به کوئری ساده تری که توی پست قبلی دادم تبدیلش کردم که دیدم با خطای syntax میگیره نمیدونم مشکلش از کجا هستش و به ظنرم خود دستورات مشکلی ندارند مگر اینکه ساختار if exists مشکل داشته باشه و mysql این ساختار رو ساپورت نکنه توی کوئری هاش چون دیدم توی sp به این شکل نوشته شده اما توی خود 1 کوئری نه!
نظر شما چیه؟
ممنون.
با سلام، چرا اين همه دردسر؟ اول فيلد id رو توي tablea بصورت unique يا primary key در بيارين تا تكراري قبول نكنه. بعد از دستورات زير استفاده كنيد:
کد:
INSERT IGNORE INTO `tableA` (`id`) VALUES ('7');
INSERT INTO `tableB` (`name`) VALUES ('majidonline');
توضيح: كلمه كليدي IGNORE در دستور INSERT باعث ميشه اگه خطايي در هنگام درج رخ بده (مثل درج ركورد جديد با مقدار تكراري براي فيلدهاي unique و primary key و...) به جاي FATAL ERROR باهاش مثل WARNING برخورد بشه و ناديده بگيره. درواقع ميگه اگه شد، درج كن، اگه نشد، ناديده بگير.
موفق باشيد.
 

Masoud1365

مدیر انجمن
کلا برای انجام یک کار در php هزار راه وجود داره ! نحوه استفاده if exist رو در سایت منبع لینک دادم حالا اگر از اون راه نشد راه های دیگه هم هست !
البته باید به پرفرمنس و اصولی بودنش هم توجه کرد !
 

greencat

Member
سلام
ممنون از MMSHFE و Masoud1365 جان به خاطر جواب‌ها.
MMSHFE جان این مثال ساده‌ای بود تا بتونم به خوبی مشکل رو بیان کنم و insert ingnore into یا replace into رو یادم بودش اما مشکل اینجاس که این جدول خودش کلید اصلی عددی داره و این فیلدی که من می‌خوام تکرار نشه رشته هستش برای همین نمی‌تونم خودش رو کلید اصلی بزارم مگر اینکه جدول رو از اول تغییر کلی بدم.
در کل میخوام بدونم این نوع کوئری توی mysql ساپورت میشه یا نه؟ چون توی sql server ساپورت میشه و معمولا اگر یکی هستش ساختار ها و یا اگر یکی نباشه جایگزینی برای هم دارن مثل limit که در Mysql هستش ولی در sql server خود Limit نیست ولی براش جایگزین‌هایی وجود داره.
خلاصه این نوع ساختار کوئری قابل اجرا هستش توی Mysql و ساپورت میشه یا فقط این ساختار رو باید توی sp ها استفاده کرد؟
ممنون از جوابتون.
 

MMSHFE

Active Member
با سلام، نميخواد كليد اصلي بگذارين، فقط اون رو Unique كنيد. توي قسمت Attributes. موفق باشيد. ضمناً تا جايي كه بررسي كردم، IF EXISTS و IF NOT EXISTS محدود به استفاده در SP نيستن. بايد مستندات MySQL رو كامل بخونم تا ببينم چطور ميشه خارج از SP ازش استفاده كرد. اگه به جواب رسيدم، بهتون خبر ميدم. موفق باشيد.
 

greencat

Member
سلام
اما تا اونجایی که من میدونم توی insert ignore into این خاصیت فقط برای Unique key ها هستش نه فیلد‌های دیگه حتی اگر Unique باشند. توی سایتی که خوندم نوشته بود این طور نیست که Mysql بیاد و تک تک فیلد‌ها رو چک کنه ببینه که تکراری هستش یا نه فقط برای فیلد‌هایی که یکتا هستشند و کلید هستند مثل کلید اصلی .
در مورد ساختار if exist در خارج از sp هم ممنون. اگر به نتیجه‌ی خواصی رسیدید اینجا قرار بدید.
من که منصرف شدم و از روش دیگه‌ای کارم رو جلو بردم.
باز هم ممنون.
 

جدیدترین ارسال ها

بالا