تالار گفتمان nCIS.ir

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

اینطوری، اگه کاربری خرید نداشته باشه، رکوردش نمیاد و اگه داشته باشه، به ازای تعداد خریدهاش تکرار میشه و جلوی هرکدوم یکی از خریداش میاد.
درسته کاربر بدون خرید داریم والبته کاربر بدون شارژ هم داریم.ممکنه برای یه کاربر خریدی نداشته باشیم و برای یه کاربر دیگه شارژی نداشته باشیم.
یعنی میخواین اطلاعات سه جدول رو ادغام کنید؟ ساختار جداولتون رو میگذارین؟
نخیر دو تا جدول به این صورت
خوب الان سناریوی شما بنظرم اشتباهه. شما از کجا میدونید که کدوم سابقه شارژ متعلق به کدوم مشخصات خرید هست؟ نمیشه که اینها رو به همدیگه وصل کنیم فقط چون هردو تا فیلد user_id دارن. اون فیلد فقط بدرد وصل کردن اینها به جدول users میخوره نه وصل کردنشون بهم دیگه.
ببخشید من فکر کنم کلا از اول اشتباه توضیح دادم وقت شمارم گرفتم.
نه من اصلا نمیخوام بگم فلان شارژ مال فلان خرید.
من فقط میخوام بگم مثلا امروز کاربر ۱ مبلغ ۳۰۰۰۰ تومان شارژ کرده.و مثلا تاریخ دیروز یک خرید به قیمت ۱۰۰۰۰ تومان داشته.
ولی میخوام این ها رو بر اساس تاریخ نمایش بدم.
خوب اگه اینطوریه، نه باید 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');