PDA

View Full Version : استفاده از JOIN برای خوندن اطلاعات جدول اصلی و برگردوندن اطلاعات جدول دوم درصورت وجود



i-php-i
پنج شنبه 04 اردیبهشت 1393, 01:47 صبح
فرض کنید یه جدول داریم که اطلاعات خریداران رو ثبت می کنه و یه جدول دیگه هم داریم که سفارشات رو ثبت می کنه.

من می خوام اطلاعات تماس کاربرها رو نشون بدم و درصورتیکه یک یا چند سفارش ثبت شده بود اون سفارشات رو هم بازیابی کنم و نمایش بدم

اما اگر یه کاربر سفارشی ثبت نکرده بود فقط اطلاعات کاربری رو نمایش بدم کوئری به چه صورت می شه و اگر ممکنه توضیح بدید.

toxic_devilcs
پنج شنبه 04 اردیبهشت 1393, 11:53 صبح
فرض کنید یه جدول داریم که اطلاعات خریداران رو ثبت می کنه و یه جدول دیگه هم داریم که سفارشات رو ثبت می کنه

حالا من می خوام اطلاعات تماس کاربرها رو نشون بدم و درصورتیکه یک یا چند سفارش ثبت شده بود اون سفارشات رو هم بازیابی کنم و نمایش بدم

اما اگر یه کاربر سفارشی ثبت نکرده بود فقط اطلاعات کاربری رو نمایش بدم

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

سلام دوست عزیز

از اونجایی که هر کسی می تونه تو برنامه نویسی سبک خودشو داشته باشه، ما هم داریم :لبخند:

ببین خیلی راحت تو جدول سفارشاتت می تونی یک column (ستون) بسازی مثلا به اسم sended_by یا parent_user و ... . حالا شما id کاربرانی که این سفارشات رو ارسال می کنن رو ذخیر می کنی تو این ستون، بعد می تونی راحت Query بگیری :

- مثلا انتخاب محصولات کاربر شماره 54651:



SELECT * FROM [your table] WHERE sended_by = '54651'


شما برای نمایش مشخصات هم می تونید یک Query جداگانه بگیرید.

i-php-i
پنج شنبه 04 اردیبهشت 1393, 17:02 عصر
فرض کنید بخواید لیست سفارشات رو نشون بدید و در کنار هر سفارش اسم محصول رو هم از جدول محصولات بخونید و توی سفارشات نمایش بدید

در این صورت ممکنه یه محصول حذف شده باشه ولی سفارش حذف نشده باشه

با توجه به اینکه لیست محصولات مختلف رو نمایش می دیم چطور باید این کار رو انجام داد؟

toxic_devilcs
پنج شنبه 04 اردیبهشت 1393, 17:23 عصر
فرض کنید بخواید لیست سفارشات رو نشون بدید و در کنار هر سفارش اسم محصول رو هم از جدول محصولات بخونید و توی سفارشات نمایش بدید

در این صورت ممکنه یه محصول حذف شده باشه ولی سفارش حذف نشده باشه

با توجه به اینکه لیست محصولات مختلف رو نمایش می دیم چطور باید این کار رو انجام داد؟

برای باز شدن موضوع یک مثال می زنم و جواب شما دوست عزیز رو می دم تا راحت بفهمید :لبخند:

خب، فرض کنیم جدول محصولات products و جدول سفارشات orders هستش.

- محصولات رو که موجود داریم
- اما سفارشات روزانه متغییر هستند

با ثبت هر سفارش، یک ردیف یا row به جدول ordersاضافه می شه حالا هر ردیف محصول یک فیلد داره به اسم ordered_product که شماره محصول مورد نظر رو داره، حالا یک مشتری رو فرض کنیم محصول 552 رو سفارش میده ضمنا این محصول رو همین امروز مدیر سایت حذفش می کنه. حالا سوال شما پیش میاد ... تکلیف اون سفارش چی میشه؟؟ قبول کنید وفتی ما از فیلد ordered_product شماره 552 رو می خونیم و اون 552 رو به Query ارسال می کنیم و نتیجه empty یعنی یک کوئری خالی اعلام میشه و ما با استفاده از یک دستور شرطی جلوی اون خطای وحشتناک :لبخند: رو میگیریم و بجاش یک رشته مناسب مثل "محصول موجود نیست" رو اعلام می کنیم.

یک راه حل دیگه هم هست معمولا کسی محصولاتش رو از پایگاه دادش حذف نمیکنه بلکه یه فیلد وضعیت برای اون قرار میده مثل product_stat و بررسی می کنه ببینه محصول در چه وضعیتی قرار داره مثل وضعیت های : موجود - لا موجود :لبخند:

امیدوارم کمکی کرده باشیم

i-php-i
پنج شنبه 04 اردیبهشت 1393, 17:54 عصر
با ثبت هر سفارش، یک ردیف یا row به جدول ordersاضافه می شه حالا هر ردیف محصول یک فیلد داره به اسم ordered_product که شماره محصول مورد نظر رو داره، حالا یک مشتری رو فرض کنیم محصول 552 رو سفارش میده ضمنا این محصول رو همین امروز مدیر سایت حذفش می کنه. حالا سوال شما پیش میاد ... تکلیف اون سفارش چی میشه؟؟ قبول کنید وفتی ما از فیلد ordered_product شماره 552 رو می خونیم و اون 552 رو به Query ارسال می کنیم و نتیجه empty یعنی یک کوئری خالی اعلام میشه و ما با استفاده از یک دستور شرطی جلوی اون خطای وحشتناک :لبخند: رو میگیریم و بجاش یک رشته مناسب مثل "محصول موجود نیست" رو اعلام می کنیم.

همین کوئری رو می تونید بنویسید ؟

toxic_devilcs
پنج شنبه 04 اردیبهشت 1393, 19:03 عصر
همین کوئری رو می تونید بنویسید ؟

بلی متغییرهاتون رو بدید

i-php-i
پنج شنبه 04 اردیبهشت 1393, 20:10 عصر
کاربرها
user_name, user_phone
سفارشات
ordder_price, ordder_time

toxic_devilcs
پنج شنبه 04 اردیبهشت 1393, 21:17 عصر
کاربرها
user_name, user_phone
سفارشات
ordder_price, ordder_time
پ.خ می کنم براتون ...

i-php-i
پنج شنبه 04 اردیبهشت 1393, 21:43 عصر
همینجا قرار بدید بهتر نیست؟!

toxic_devilcs
جمعه 05 اردیبهشت 1393, 01:54 صبح
همینجا قرار بدید بهتر نیست؟!

Query جدول سفارش های (orders) شما بر حسب شماره سفارش ارسالی (ordered_product) :



$orders_query= "SELECT * FROM orders WHERE ordered_product";
$result_orders = mysqli_query($connection,$orders_query);
$row_orders = mysqli_fetch_assoc ($result_orders);



Query جدول سفارشات شما در حالت معمولی:



$allorders_query= "SELECT * FROM orders";
$result_allorders = mysqli_query($connection,$allorders_query);
$row_allorders = mysqli_fetch_assoc ($result_allorders);



حالا مثلا می خوایم محصول شماره 552 تو سفارش دهم چک کنیم، اگر که سطر انتخاب شده سفارش بر حسب ordered_product خالی نبود مشخصات سفارش و محصول رو جداگانه نمایش بده در غیر اینصورت پیغام محصول موجود نیست رو نمایش بده، برای مثال



if(!empty($row_orders)){
دستورات نمایش سفارش و محصول
}else{
echo "product dosen't exist";
}


بازم می گم Query محصول و سفارش از هم جداست ولی یک فیلد مشترک دارند (ordered_product با شماره محصول درج شده در محصولات مثلا product_id)

i-php-i
جمعه 05 اردیبهشت 1393, 02:34 صبح
Query جدول سفارش های (orders) شما بر حسب شماره سفارش ارسالی (ordered_product) :
عنوان سوال گفته شده با LEFT JOIN

با LEFT JOIN کار کردید؟

toxic_devilcs
جمعه 05 اردیبهشت 1393, 10:18 صبح
عنوان سوال گفته شده با LEFT JOIN

با LEFT JOIN کار کردید؟




از اونجایی که هر کسی می تونه تو برنامه نویسی سبک خودشو داشته باشه، ما هم داریم :لبخند:


تو پست دومم اینو گفتم .

- نه . بنده حقیر نه ... Left Join رو استفاده نمی کنم

i-php-i
جمعه 05 اردیبهشت 1393, 12:02 عصر
اگه LEFT JOIN رو یاد بگیرید تعداد کوئری ها و حلقه هایی که باید بنویسید کاهش پیدا می کنه و کدهاتون حرفه تر خواهند بود