طراحی کوئری های پیچیده

md5

Member
با سلام
میخواستم تو این بخش در مورد ساختن کوئری های پیچیده برای مای اس کیو ال بحث کنیم و از اول و تمام حالات رو شرح بدیم راستش خودم تا یه حدود با این نوع کوئری ها آشنا هستم و میتونم به نتایجی برسم منتهی نمیدونم راهی که میرم بهترین راه یا میشه از راه بهتری هم به نتیجه رسید

خوب با یه کوئری ساده شروع کنیم
2 تا جدول داریم که تو اولی شناسه یکتا و نام کاربری و کلمه رمز وجود داره و تو 2می شناسه یکتا و شناسه کاربری و مثلا آخرین اخبار مربوطه که کاربر وارد کرده میخواهیم 5 تا خبر آخر که کاربر ارسال کرده رو بدست بیاریم

HTML:
SELECT news.news from user,news where user.username = 'xxx' AND news.uid = user.id ORDER BY news.id DESC LIMIT 5
 

md5

Member
خوب حالا اولا این استیتمنت من رو بهینه سازی کنید
در ضمن من یکم صورت مسئله رو میپیچونمش
این حالت رو در نظر بگیرید که ما مثلا 10 تا کاربر داریم و 7 تاشون هرکدوم 10 تا اخبار ارسال کردن یه کوئری می خوام که بتونه بگه کدوم کاربر ها اخبار ارسال کردن و فقط نام کاربریشون رو برگردونه و نام هرکاربر فقط یه بار تو نتیجه بیاد نه 10 بار
 

I.NoBody

Active Member
مبحث خوبی رو شروع کردی. امیدوارم دوستان دیگه و بخصوص مدیران محترم، بهش بها بدن.
من فکر می کنم اگه کوئری رو اينجوری بنويسيم، توی کد نویسی راخت تر باشيم :
کد:
SELECT a.news,b.username from news AS a,users AS b where b.username = 'xxx' AND a.uid = b.id ORDER BY a.id DESC LIMIT 5
با این کار من به نام جداولم کلماتی نظير a و b نسبت دادم و از این به بعد با اونها کار کردم.
میدونید که معمولاً برنامه نویس ها توی کدنویسی به جای نام جدول از متغیر استفاده می کنن. حالا اگه تعداد فیلدها و شرط های query زیاد باشن، کد ما پر از متغیر میشه در حالیکه با این کار فقط به تعداد نام جدول ها از متغیر استفاده میشه.

دوست عزیز منتظر query های بعدیت هستیم
 

md5

Member
حق با تو هستش منم تو کوئری های پیچیده از این تکنیک استفاده می کنم منتهی واسه کوئری های ساده تر نیاز به این کارنباشه چون فکر میکنم همین نسبت دادن نام جدولها به متغیر خودش یکم پروسس بخواد و چون این جدول ها تداخل ندارن نیاز به این کار نباشه
 

md5

Member
خوب استیتمنت دوم رو هم من اینطوری نوشتم
HTML:
SELECT * FROM user WHERE `id` IN(SELECT uid FROM news WHERE 1)
 

I.NoBody

Active Member
البته فکر می کنم بهتره اسم تاپيک رو اگه میزاشتی queryهای پيشرفته بهتر بود.
چون فکر نمیکنم ایم queryها زياد پیچیده باشن
 

md5

Member
خوب برای شروع از این کوئری ها استفاده کردم یواش یواش پیچیدش می کنیم
 

ziXet

مدیر انجمن PHP/MYSQL
مبحث جالبیه!
اگه یدونه از انها هم برای Regexها بزنید خیلی خوب میشه!
 

I.NoBody

Active Member
کد:
SELECT * FROM tbl1 WHERE parent_id=0 UNION SELECT * FROM tbl2 WHERE `parent_id` IN( SELECT id FROM tbl1)
هدف: معرفی دستور UNION
با این دستور می تونید SELECTهای مختلفی رو که فیلدهای یکسانی دارن به هم ملحق کنيد.
 

جدیدترین ارسال ها

بالا