ورود

View Full Version : راهنمایی برای نوشتن procedure در mysql



m.kahtooei
چهارشنبه 15 دی 1395, 11:37 صبح
سلام دوستان
من میخوام یه procedure برای دیتابیس mysql در php my admin بنویسم که متاسفانه هرکار کردم به در بسته خوردم و همش داره ارور میده
اگه دوستان راهنمایی کنید که چطور باید بنویسم ممنون میشم

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

باتشکر

Mahmood_M
چهارشنبه 15 دی 1395, 17:32 عصر
اول پیشنهاد می کنم به جای PHPMyAdmin از MySQL WorkBench استفاده کنید که کار کردن با بانک براتون خیلی راحت تر میشه و امکانات خیلی بیشتری در اختیار دارید
...
اگر تعداد انتخاب ها برای نام جدول محدوده ، یعنی از بین چند جدول مشخص انتخاب میشه، می تونید یک پارامتر ورودی برای مشخص کردن جدول ایجاد کنید و از شرط با دستور CASE استفاده کنید و کد مربوط به هر جدول رو اجرا کنید
اگر تعداد انتخابها هم محدود و مشخص نیست، می تونید از Prepared Statement استفاده کنید، یک مثال در این لینک وجود داره :
http://stackoverflow.com/questions/34505799/how-to-pass-dynamic-table-name-into-mysql-procedure-with-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
پنج شنبه 16 دی 1395, 09:16 صبح
خییییییییییییییییییلی ممنون
خدا رو شکر بالاخره کار کرد.
دلیل اصلی کار نکردن کدهای قبلی هم فکر کنم اشتباهات ریزی مثل قرار دادن نام فیلد در ( ' ) و از این جور مشکلات بود که من فکر میکردم مشکل از کد های منه

رضا قربانی
یک شنبه 24 بهمن 1395, 12:11 عصر
سلام
آقا من یه کد 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 مخالف ویلا و آپارتمان و زمین بود بیا نمایش بده

رضا قربانی
یک شنبه 24 بهمن 1395, 14:19 عصر
دقیقا برعکس جستجوعه . در جستجو میگیم اگر اینا بود بیا نمایش بده . ما در اینجا میگیم اگر ویلا و آپارتمان و زمین بود نمایش نده !!!
ممنون میشم راهنماییمون کنید . گیر کردم :افسرده:

رضا قربانی
شنبه 07 اسفند 1395, 12:11 عصر
..... up ..... گیر کردم

رضا قربانی
شنبه 07 اسفند 1395, 12:12 عصر
......... آپ ..... گیر کردم :افسرده::ناراحت:

سعید صابری
شنبه 07 اسفند 1395, 15:04 عصر
خیلی مسئله را پیچیده کردی

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



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

رضا قربانی
یک شنبه 08 اسفند 1395, 20:24 عصر
ممنون جناب . درست شد