# پایگاه‌های داده > سایر پایگاه‌های داده > MySQL >  راهنمایی برای نوشتن procedure در mysql

## m.kahtooei

سلام دوستان
من میخوام یه procedure  برای دیتابیس mysql  در php my admin بنویسم که متاسفانه هرکار کردم به در بسته خوردم و همش داره ارور میده
اگه دوستان راهنمایی کنید که چطور باید بنویسم ممنون میشم

داستان از این قراره که من میخوام تو یه جدولی بنویسم که نامش از الان مشخص نیست و زمان اجرا مشخص میشه .
مثلا :
فرض کنید که ما دو نام a, b رو که از کاربر میگیریم و حالا میخوایم چک کنیم که آیا مقدار a در جدول  b وجود داره؟ اگه وجود داشت id اون رکورد رو به ما بده و اگه وجود نداشت مقدار a رو در جدول b ذخیره کنه و مثلا “OK” رو برای ما برگردونه
انواع کدها و روش ها رو امتحان کردم ولی نشد که نشد!!!!!!!!!!!

باتشکر

----------


## Mahmood_M

اول پیشنهاد می کنم به جای PHPMyAdmin از MySQL WorkBench استفاده کنید که کار کردن با بانک براتون خیلی راحت تر میشه و امکانات خیلی بیشتری در اختیار دارید
...
اگر تعداد انتخاب ها برای نام جدول محدوده ، یعنی از بین چند جدول مشخص انتخاب میشه، می تونید یک پارامتر ورودی برای مشخص کردن جدول ایجاد کنید و از شرط با دستور CASE استفاده کنید و کد مربوط به هر جدول رو اجرا کنید
اگر تعداد انتخابها هم محدود و مشخص نیست، می تونید از Prepared Statement استفاده کنید، یک مثال در این لینک وجود داره :
http://stackoverflow.com/questions/3...ith-this-query



> فرض کنید که ما دو نام a, b رو که از کاربر میگیریم و حالا میخوایم چک کنیم که آیا مقدار a در جدول b وجود داره؟ اگه وجود داشت id اون رکورد رو به ما بده و اگه وجود نداشت مقدار a رو در جدول b ذخیره کنه و مثلا “OK” رو برای ما برگردونه


مقدارها رو SELECT کنید و با Count تعدادش رو بریزید داخل یک متغیر :
SELECT Count(ID) INTO @C FROM b WHERE MyField = 'a'
مقدار Count توی @C ذخیره میشه و میت ونید روی مقدارش شرط بذارید که اگر مقدارش مثلا بزرگتر از یک بود یعنی وجود داره
اگر میخواید ID همون رکورد رو بگیرید می تونید به اسن صورت عمل کنید :
SET @MyID = 0;
SELECT ID INTO @MyID FROM b WHERE MyField = 'a'
IF (@MyID > 0) THEN
SET MyOutID = @MyID;
ELSE
INSERT INTO b ...;
SET MyOutMsg = 'OK';
END IF;
فرض می کنیم در کد بالا متغیر های MyOutMsg و MyOutID به صورت پارامترهای خروجی ( OUT ) برای SP تعریف شدن

اگر باز مشکل وجود داشت کدی که نوشتید رو قرار بدید که بررسی بشه

----------


## m.kahtooei

خییییییییییییییییییلی ممنون
خدا رو شکر بالاخره کار کرد.
دلیل اصلی کار نکردن کدهای قبلی هم فکر کنم اشتباهات ریزی مثل قرار دادن نام فیلد در ( ' ) و از این جور مشکلات بود که من فکر میکردم مشکل از کد های منه

----------


## رضا قربانی

سلام 
آقا من یه کد sql دارم که بهینه نیست و در هاست جواب نمیده چون چند تا مقدار میفرسته . امکانش هست راهنماییم کنید :

select `group_sub` from `tbl_amlak` where 
`group_sub` <> (select `group_sub` from `tbl_amlak` where `group_sub` like '%ویلا%' ) and 
`group_sub` <> (select `group_sub` from `tbl_amlak` where `group_sub` like '%آپارتمان%') and
`group_sub` <> (select `group_sub` from `tbl_amlak` where `group_sub` like '%زمین%') 
GROUP BY `group_sub` DESC 

میگم اگر فیلد group_sub مخالف *ویلا و آپارتمان و زمین بود* بیا نمایش بده

----------


## رضا قربانی

دقیقا برعکس جستجوعه . در جستجو میگیم اگر اینا بود بیا نمایش *بده* . ما در اینجا میگیم اگر *ویلا و آپارتمان و زمین* بود نمایش *نده* !!!
ممنون میشم راهنماییمون کنید . گیر کردم  :افسرده:

----------


## رضا قربانی

..... up ..... گیر کردم

----------


## رضا قربانی

......... آپ ..... گیر کردم  :افسرده:  :ناراحت:

----------


## سعید صابری

خیلی مسئله را پیچیده کردی

SELECT `group_sub` FROM `tbl_amlak` WHERE



 (`group_sub` NOT  LIKE '%ویلا%' ) AND 

( `group_sub` NOT LIKE '%آپارتمان%') AND

( `group_sub` NOT  LIKE '%زمین%') 

GROUP BY `group_sub` DESC



چک کن از نظر نگارشی استباه نداشته باشم همینجوری تغییر دادم...

----------


## رضا قربانی

ممنون جناب . درست شد

----------

