آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

چگونه می توانیم یک کوئری با شرط داینامیک بنویسیم ؟

kazemian  6 سال پیش  6 سال پیش
0 0

سلام بچه ها
من یک کوئری نوشتم که مقادیری رو از سرور select می کنه

 select * from myTable where type=1 And type=38

مشکلی که دارم اینه که بسته به شرایط ممکنه تعداد And های کوئری متفاوت باشه
مثلا یه جا کوئری من باشه :

 select * from myTable where type=1 And type=38 And type=24

توی یه شرایط دیگه به این صورت باشه :

  select * from myTable where type=1 And type=38 And type=24 And type=3 And type=11 And type=29 And type=19  ...


چطور می تونم این قسمت And کوئری رو داینامیک کنم
مثلا بشه یه حلقه ی for نوشت توی کوئری و به تعدادی که می خوام And بزاره !

+1 0
سلام ، ساده است همونطور که خودتون گفتین داخل حلقه ی for دستور را قرار دهید و به جای مقادیر ثابت متغیر قرار دهید. (6 سال پیش)
0 0
آخه مشکل اینجاست که نمیدونم چند تا And بنویسم. تعداد And ها بسته به شرایط فرق می کنه.امیدوارم تونسته باشم منظورمو برسونم (6 سال پیش)
0 0
لطفاً بیشتر توضیح دهید. (6 سال پیش)
0 0
متن سوالم رو ویرایش کردم (6 سال پیش)
 برای این سوال 2 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
libcode  6 سال پیش
0 0

ساده ترین راه حل این هستش که اون مقادیری که فرق میکنند و باید اعداد خاصی کنار هم باشند رو در یک آرایه به یک اسم خاص قرار بدید و در هر قسمت که یک if قرار دادید بعدش باید مقادیر خاص در سر جای خود قرار بگیرند. مثلاً :

 select * from myTable where type=1 And type=$types[0] And type=$types[1] And type=$types[2] And type=$types[3] And type=$types[4] And type=$types[5] .

اگر توضیح بدید برای چه کاری هست بیشتر میتونم کمکتون کنم.

0 0
مشکل اینجاست که نمیدونم آرایه قرار هست چند تا عضو داشته باشه. با توجه به تعداد اعضای آرایه ام باید در query از کلمه ی And استفاده کنم که نمیدونم! (6 سال پیش)
پاسخ به سوال 
Criss  6 سال پیش
+1 0

 پاسخ صحیح

روی آرایه forEach بزنید یه String بسازید بعدش اون String رو توی دستور SQL استفاده کنید :

$sql='type=1 And type=38'
$sql='type=1 And type=38 And type=24'
$sql='type=1 And type=38 And type=24 And type=3 And type=11 And type=29 And type=19 ...'

select * from myTable where $sql


نمونه عملی :

 if (is_numeric($word)) {
        if (strlen($word) == 13) {
            $sql = 'WHERE prson.code= :code';
            $key = 'code';
        } else {
            $sql = 'WHERE manager.id = :id';
            $key = 'id';
        }
    } else {
        $sql = 'WHERE prson.desc LIKE :word';
        $word = '%' . $word . '%';
        $key = 'word';
    }


    $records = $db->query("SELECT *
FROM manager
LEFT OUTER JOIN prson
ON manager.prson_id=prson.id
LEFT OUTER JOIN store ON manager.room_id=room.id
$sql
AND manager.city_id=:city_id
AND manager.enable=TRUE
AND prson.enable=TRUE
ORDER BY manager.life > $toDay DESC , manager.available DESC , manager.id DESC "
        , array(
            $key => $word,
            'city_id' => $city_id,
        ));

 

+1 0
سپاس از شما که کد را گذاشتید. (6 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .