ورود

View Full Version : ساخت query همراه با join (حل شد)



Borland.C
دوشنبه 10 آذر 1393, 17:11 عصر
می خوام 2تا جدول رو باهم جوین کنم و نتیجه رو تو CGridView نمایش بدم.
مشکل اینجاست که وقتی از $criteria->join استغاده می کنم فقط مقدارهای جودل1 تو خروجی ظاهر میشن و از جدول2 هیچ نشانی نیست!
و زمانی که از رابطه استفاده می کنم کلا گیج میشم راستش برام مفهوم نیست تازه با 1000زحمت که راهش انداختم تو نمایش مشکلی نیست اما تو ویرایش خطا میده و حسابی رو اعصابه خلاصه.
هرچی هم به مثال های نت نگاه می کنم پیاده سازیش برام مبهم میشه خلاصه متوجه رابطه ها نشدم کلا
مشکل هم ساختاری هست(چون تازه کارم و اطلاعاتم بسیار محدود)
اگه یکی از دوستان کمی وقت بذاره و این مشکل برام تفهیم بشه خیلی خیلی ممنون میشم

MMSHFE
چهارشنبه 12 آذر 1393, 09:18 صبح
اگه توی کوئری از LIMIT استفاده کرده باشین Join زده نمیشه مگه اینکه با مقداردهی together با مقدار true مجبورش کنید Join بزنه.

MMSHFE
چهارشنبه 12 آذر 1393, 09:27 صبح
مثلاً این کد رو ببینید:

$itemsPerPage = 10;
$criteria = new CDbCriteria();
$criteria->limit = $itemsPerPage;
$criteria->offset = (max(1, $page) - 1) * $itemsPerPage;
$criteria->order = 'stars DESC,t.id DESC';
$criteria->with = 'adpositions';
$criteria->together = true;
$criteria->addColumnCondition(array('skillgroup_id'=>$gid));
$criteria->addCondition('skill_id IS NULL');
$criteria->addColumnCondition(array('jobtype_id'=>1));
$criteria->addColumnCondition(array('t.confirmed'=>1));
$ads = EmploymentAds::model()->findAll($criteria);
توی این کد از دو تا جدول employment_ads و employment_adpositions استفاده شده که جدول adpositions ازطریق فیلد ad_id به جدول ads وصل شده و ارتباط یک به چند دارن. آگهی اصلی کاریابی توی جدول ads ثبت میشه و ردیفهای استخدامی اون توی جدول adpositions و من میخواستم تمام آگهی هایی رو پیدا کنم که توی گروه مشخص شده در gid هستن و مهارت خاصی براشون انتخاب نشده و ازطرفی خود آگهی هم تأیید شده (confirmed برابر با 1) و نوع ردیف استخدامی هم تمام وقت بوده (jobtype_id برابر با 1)
توی کد فوق فیلدهای jobtype_id و skillgroup_id و skill_id مربوط به جدول adpositions و confirmed در هر دو جدول موجود بوده که برای اینکه بگم منظورم confirmed جدول ads هست از پیشوند .t استفاده کردم. کد به اندازه کافی واضحه ولی اگه باز هم مشکلی بود بفرمایید تا بیشتر توضیح بدم.

MMSHFE
چهارشنبه 12 آذر 1393, 09:31 صبح
نکته مهم اینه که اون چیزی که توی join تعریف میکنید باید حتماً توی relations تعریف شده باشه.