PDA

View Full Version : آیا برای دریافت این اطلاعات بهینه تر میشه عمل کرد؟



intel_amd
سه شنبه 06 آبان 1393, 17:47 عصر
یک قسمت به شکل گزارش وجود داره که باید بیاد مثلا 100 دانشجو نام و فامیلشون به همراه نام و فامیل استاد مربوطشون به همراه نام پروژه ای که با استادشون گرفتن نمایش داده شه
حالا موضوع اینجاست که مثلا :
در جدول اساتید id هر استاد , نام استاد , فامیلش و مشخصات دیگرش قرار داره
در جدول پروژه ها id هر پروژه , نام پروژه و مشخصات دیگر مربوط به هر پروژه قرار داره
در جدول یوزر ها هم id هر یوزر , id استادی که باهاش پروژه داره , id پروژه ای که داره و مشخصات دیگر یوزر قرار داره

حالا برای اینکه چاپ کنم مثلا رضا استاد علیمی پروژه درس هوش مصنوعی و ......
باید اولا سلکت کنم رکوردهای مربوط به id این دانشجو بیان بعد رکوردهای نتیجه به درد چاپ نمیخورن چون مثلا به عنوان استاد id اون استاد وجود داره مثلا 64 یا به عنوان پروژه id پروژه وجود داره مثلا 546 , پس باید در حلقه دونه دونه برای هر رکورد بیام 1 سلکت قرار دهم که id پروژرو بگیره نام پروژرو بده و 1 سلکت قرار دهم id استاد بگیره نامشو بده
این برای 1 رکورد و داخل حلقه 100 بار اینا باید برای 100 دانشجو انجام شه که خیلی سنگین میشه
آیا کار دیگه ای میشه کرد؟

2undercover
سه شنبه 06 آبان 1393, 18:08 عصر
اگر از SQL استفاده می کنید که Join ها برای همین به وجود آمده اند دیگه!

intel_amd
سه شنبه 06 آبان 1393, 20:11 عصر
بله از sql استفاده میکنم mysql اما زمان خیلی زیادی هست که باهاش کار نکردم خیلی چیزاش یادم نیست میشه یک مثال از همین نوعی که مثال زدم بیارید؟

intel_amd
چهارشنبه 07 آبان 1393, 01:11 صبح
با join کار کردم اما برای سلکت زیر به مشکل خوردم

الان یک جدول یوزر در نظر بگیرید که id یوزر داره و مشخصات دیگر یوزر
یک جدول پروژه با id پروژه و مشخصات دیگر پروژه
حالا مثلا یک جدول در نظر بگیرید برای ثبت اینکه چه دانشجوئی چه پروژه ای به چه دانشجوی دیگری واگذار کرده ملاک از این مثال آوردن 2 id از یک جدول در جدولی دیگر است
در جدول فوق id دانشجوئی که پروژه را واگذار کرده در یک فیلد و id دانشجوئی که پروژه را پذیرفته در فیلدی دیگر در هر رکورد آمده , همینطور id پروژه
حالا مشکل اینجاست که وقتی نام صاحب id دانشجو هارو میخام بدونم join فقط بر روی یکی از آنها اطلاعات را بهم میدهد چون در on فقط یک فیلد می شود برابر قرار داد

کد کامل در زیر می آورم
در زیر می خواستم کلیه رکوردهائی از یوزری با id برابر 40 را نمایش دهم : چه این یوزر به کسی پروژه داده است و چه از کسی پروژه ای گرفته است باید در زیر نمایش داده شود که به چه کسانی پروژه داده یا از چه کسانی پروژه گرفته است
id1 کسی است که پروژه داده و id2 کسی است که پروژه را گرفته است , حال آنکه یکی از این id1,id2 را میتوانم اسمش را با کد زیر نمایش دهم چون روی on فقط یکی را میتوانم با user.id ببندم بهم


SELECT * from vagozariha inner join user on vagozariha.id1=user.id WHERE (id1=40 OR id2=40) AND vagozariha.type IN('gharzi','furushi')

intel_amd
چهارشنبه 07 آبان 1393, 21:21 عصر
دوستان این موضوع کسی راهی براش نداره؟

2undercover
پنج شنبه 08 آبان 1393, 05:52 صبح
http://stackoverflow.com/questions/9114781/join-multiple-columns-from-one-table-to-single-column-from-another-table

intel_amd
پنج شنبه 08 آبان 1393, 17:12 عصر
ای ول دقیقا همینو دنبالش بودم این خیلی کمکم کرد دست درد نکنه