آموزش طراحی وب

نحوه ی انتخاب آخرین رکورد از جدول دوم

در این مقاله ی با ذکر مثال دانش آموزان و دریافت آخرین نمره ی هر دانش آموز نحوه ی انتخاب آخرین رکورد از جدول دوم رو آموزش خواهیم داد و با Group By نیز بیشتر آشنا خواهید شد …

mysql

نحوه ی انتخاب آخرین رکورد از جدول دوم

و انتخاب چند فیلد از جداول مختلف

سلام خدمت همراهان همیشگی مدرسه مجازی ایرانیان

در مقاله ی Union یاد گرفتید که چطور از جداولی که فیلدهای یکسان دارن اطلاعات select کنید، حالا ممکنه بخواین از جداول مختلف که فیلدهای یکسان هم ندارن ، فیلدهای مختلف رو select کنید.

برای مثال :

یک جدول ایجاد کردیم برای دانش آموزان که با فیلدهای نام ، نام خانوادگی ، نام پدر این جدول تشکیل شده (برای پروژه های اصلی کلیه ی اطلاعات دانش آموز گرفته میشه)

student

یک جدول ایجاد کردیم که نام درس ها ذخیره میشه :

2

یک جدول ایجاد کردیم که نمرات هر درس رو وارد می کنیم:

3

اطلاعاتی که در جداول بالا درج شده اطلاعات زیر رو نشون میده :

دانش آموز حسین همت یار در درس ” انگلیسی ” به ترتیب نمره های ۱۸ ، ۲۰ ، ۱۹ رو کسب کرده .

دانش آموز مینا همتی در درس ” انگلیسی ” به ترتیب نمره های ۱۷ ، ۱۶ ، ۱۹ رو کسب کرده .

دانش آموز مونا رستگار در درس ” انگلیسی ” به ترتیب نمره های ۱۴، ۱۶، ۱۲ رو کسب کرده .

حالا ما میخوایم یک کوئری بزنیم که آخرین نمراتی که دانش آموزان در درس انگلیسی کسب کردند رو دریافت کنیم. چون آخرین نمره رو میخوایم باید تعداد دریافتی رو محدود کنیم و بگیم آخرین رکورد درج شده مربوط به هر دانش آموز رو در جدول numbers بگیر و نمایش بده :

نتیجه :

4

خوب حالا بیاین کوئری رو بررسی کنیم :

همونطور که میبینید بین جدول students و numbers با کلید اصلی  students.id و کلید خارجی numbers.students_id ارتباط بر قرار است. توسط همین ارتباط ما کوئری رو مینویسیم .

select اصلی رو روی جدول students می زنیم . برای اینکه سیستم متوجه بشه ما از کدوم جداول کدوم فیلدهارو انتخاب می کنیم ، ابتدا نام جدول رو مینویسیم و با یک نقطه نام فیلد مورد نظر رو مینویسیم .

فیلد name و  family رو از جدول students انتخاب کردیم ، حالا میخوایم فیلد number رو از جدول numbers دریافت کنیم. همینطوری نمیتونیم number رو انتخاب کنیم باید یکسری شرایط براش تعریف کنیم ، اول اینکه یه inner join استفاده می کنیم تا نمرات هر دانش آموز رو مختص به خودش انتخاب کنه .

تو inner join یه select میزنیم از جدول numbers و فیلدهای مورد نیاز رو انتخاب می کنیم ، و چون آخرین نمره رو میخوایم میگیم بر اساس تاریخ مرتب کن و آخرین نمره ی ثبت شده رو select کن . توی شرط هم میگیم اونایی رو انتخاب کن که مربوط به درس انگلیسی هستند، بعد از select از الیاس استفاده می کنیم و میگیم این select یی که انجام شده به عنوان جدول  num در نظر بگیر. پس از این به بعد باید بجای اشاره به جدول  numbers به جدول  num اشاره کنیم . پس در ادامه اتصال بین دو جدول رو با استفاده از نام num انجام میدیم.

برمیگردیم به خط اول ، میبینید که فیلد  number رو از num انتخاب کردیم.

حالا برای اینکه فقط یک رکورد از هر دانش آموز رو بهمون نمایش بده از  group by استفاده می کنیم. با این دستور میگیم studnets.id های تکراری رو نمایش نده ، فقط آخرین رکورد از نمرات رو برای هر دانش آموز نمایش بده.

اگر از  group by استفاده نمیکردیم تمامی نمرات رو برای هر دانش آموز نمایش میداد ، با  group by گفتیم id های تکراری رو نمایش نده .

خوب دوستان بریم stored procedure این کوئری رو هم بنویسیم:

حتی میتونید این sp رو داینامیک ترش کنید که برای تمامی دروس استفاده بشه ، پس میتونیم id درس رو به عنوان ورودی به کوئری پاس بدیم:
اگر این مطلب آموزشی براتون مفید بوده ، میتونید لینک مطلب رو در شبکه های اجتماعی به اشتراک بگذارید.

موفق و پاینده باشید.

حسین همت یار

نویسنده در مدرسه مجازی ایرانیان ، دانشجوی رشته IT ، طراح وب و علاقه مند به تازه های دنیای اینترنت و وب و البته لینوکس

دیدگاه ۴

  • سلام
    عالی بود. واقعا جایی این آموزش ها گیر نمیاد
    فقط اگه خواسته باشیم که یه مقدار رو بگیریم و بهش یه مقدار دیگه اضافه کنیم (هر دو عددی باشه) باید چجوری کنیم یعنی باید دو تا دستور بنویسیم ۱.Select
    ۲.Update
    درسته؟ اینجوری یکم سرعت پایین نمیاد.
    خیلی واجبه
    بازم ممنون

  • سلام داریم یه سایت نسبتا بزرگی رو مینویسم و از سایتتون واقعا ممنونم بخاطر آموزش هاش.
    فقط می خواستم بدونم اینکه ما تو هر صفحه چند بار دیتابیس رو با pdo باز میکنیم و اطلاعات رو برمیداریم درسته آیا؟ یعنی مثلا همون صفحه رو به روز میکنه فقط می خواهم توی هدر تعداد نظرات رو نشون بده حالا این هدر هم توی تمامی صفحات هست آیا همین روش استاندارد هست؟
    خیلی ممنون

آیا سوالی دارید؟

پنل کاربران

بستن
*
*

نظرسنجی

به کدام دسته موضوعی علاقه مند هستید؟

آخرین پرسش و پاسخ ها

اموزش تصادفی

خبرهای باحال دریافت کن

خبرهای باحال دریافت کن

ما هم مثل شما از دریافت ایمیل های مزاحم خوشمون نمیاد. فقط مطالب جدید و خبرهای ویژه رو به اطلاع شما میرسونیم. قول میدیم اسپم نکنیم :)

ثبت نام انجام شد ، لطفا ایمیلی که براتون ارسال میشه رو تایید کنین