رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
join دو جدول
#1
سلام.
من دو تا تیبل دارم که داخل یکیش مشخصات خرید کاربر ذخیره میشه و داخل یکی دیگش سابقه شارژ حسابش.
که ممکنه بعضی از مواقع یکی از این جدول ها خالی باشه.که دقیقا مشخص نیست که برای هر کاربر کدومش خالیه.
فقط یک فیلد مشترک بین این دوجدول هست.
حالا من میخوام مقادیر این دو تا جدول رو با هم join کنم و بر اساس تاریخ نمایش بدم.
درخواست کمک داشتم.
ممنون
پاسخ
تشکر شده توسط:
#2
اگه طراحی درست باشه، جدول کاربران نباید برای هیچ خریدی خالی باشه (خرید بدون کاربر نداریم ولی کاربر بدون خرید ممکنه داشته باشیم). اگه اینطوریه، از LEFT JOIN استفاده کنید و جدول سمت چپ رو خریدها انتخاب کنید. مثال:
SELECT * FROM `buys` `b`
LEFT JOIN `users` `u`
ON `b`.`user_id`=`u`.`id`

اینطوری، اگه کاربری خرید نداشته باشه، رکوردش نمیاد و اگه داشته باشه، به ازای تعداد خریدهاش تکرار میشه و جلوی هرکدوم یکی از خریداش میاد.
پاسخ
تشکر شده توسط:
#3
درسته کاربر بدون خرید داریم والبته کاربر بدون شارژ هم داریم.ممکنه برای یه کاربر خریدی نداشته باشیم و برای یه کاربر دیگه شارژی نداشته باشیم.
پاسخ
تشکر شده توسط:
#4
یعنی میخواین اطلاعات سه جدول رو ادغام کنید؟ ساختار جداولتون رو میگذارین؟
پاسخ
تشکر شده توسط:
#5
نخیر دو تا جدول به این صورت


فایل‌های پیوست تصاویر بندانگشتی
       
پاسخ
تشکر شده توسط:
#6
خوب الان سناریوی شما بنظرم اشتباهه. شما از کجا میدونید که کدوم سابقه شارژ متعلق به کدوم مشخصات خرید هست؟ نمیشه که اینها رو به همدیگه وصل کنیم فقط چون هردو تا فیلد user_id دارن. اون فیلد فقط بدرد وصل کردن اینها به جدول users میخوره نه وصل کردنشون بهم دیگه.
پاسخ
تشکر شده توسط:
#7
ببخشید من فکر کنم کلا از اول اشتباه توضیح دادم وقت شمارم گرفتم.
نه من اصلا نمیخوام بگم فلان شارژ مال فلان خرید.
من فقط میخوام بگم مثلا امروز کاربر ۱ مبلغ ۳۰۰۰۰ تومان شارژ کرده.و مثلا تاریخ دیروز یک خرید به قیمت ۱۰۰۰۰ تومان داشته.
ولی میخوام این ها رو بر اساس تاریخ نمایش بدم.
پاسخ
تشکر شده توسط:
#8
خوب اگه اینطوریه، نه باید Join کنید و نه میشه با Union کار کرد چون اسامی و تعداد فیلدها فرق میکنه. باید همه رو جداگانه بخونید و بریزین توی یه آرایه انجمنی و بعد با کمک usort آرایه رو براساس فیلد ts مرتب کنید:
function sortByTs($first, $second)
{
    if($first['ts'] == $second['ts']) {
        return 0;
    }
    return ($first['ts'] < $b['ts'] ? -1 : 1);
}

usort($array, 'sortByTs');
پاسخ
تشکر شده توسط: mehr1362




کاربران در حال بازدید این موضوع: 2 مهمان