- آموزش طراحی وب - http://www.iranweblearn.com -

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

mysql

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

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

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

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

برای مثال :

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

student

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

2 [2]

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

3 [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 درس رو به عنوان ورودی به کوئری پاس بدیم:

اگر این مطلب آموزشی براتون مفید بوده ، میتونید لینک مطلب رو در شبکه های اجتماعی به اشتراک بگذارید.

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