PDA

View Full Version : ايجاد كوئري



H:Shojaei
دوشنبه 06 آبان 1392, 18:29 عصر
با سلام خدمت دوستان
يه جدول اصلي دارم كه يه ID داره بعد اين ID ميره تو دو تا جدول ديگه تقسيم ميشه يعني تو مثلا U_ID هاي اون دو تا جدول ديگه خب حالا ميخوام از اين دو تا جدول اونايي كه ID شون برابر ID هاي جدول اصليه رو در بيارم...
به عبارت ديگه ميخوام يه جور جوين بزنم كخ هر بار يه سطر از اين دوتا جدولي كه دارم رو نمايش بده بر اساس اون ID كه تو جدول اصلي هست.
مثلا جداولم اينه:
جدول اصلي: ID>1 , ID>2
جدول فرعي اول: U_ID>1
جدول فرعي دوم:‌ U_ID>2
ميخوم طوري جوين بزنم كه وقتي گفتم آي دي برابر 1 رو بده از جدول اول كل سطرشو بهم بده...
با تشكر پيشاپيش :)

Veteran
دوشنبه 06 آبان 1392, 18:43 عصر
اگر جدول رو بزارید با یک مثال شاید بتونم بهتر کمکت کنم حسن جان

H:Shojaei
دوشنبه 06 آبان 1392, 20:40 عصر
ممنون سبحان جان ممنون ميشم :)
112322
يه توضيح با مثال هم بگم...
يه جدول اصليه كه تمام كاربرا تو اونن يعني و اطلاعات مختصر براي ورود به پنلشون و آيدي هر كاربر اونجاست..
و دو تا جدول هم هست كه هر كدوم واسه يه مدل كاربر با سطح دسترسي متفاوت وجود داره با اطلاعات متفاوت كه اطلاعات ديگشون تو اون دو تا جدوله.
حالا ميخوام مثلا اطلاعات كاربري كه تو جدول اصلي آي ديش مثلا 1 هست رو از جداول ديگه به دست بيارم چون اطلاعات تو دو تا جدوله نميدونم چطوري جوين بزنم يا كلا چكار كنم...
در كل يه چيزي تو اين مايه ها:

SELECT *
FROM `doctor_users` , `people_users` , `all_users`
WHERE (
`all_users`.`id` = `doctor_users`.`u_id`
OR `all_users`.`id` = `people_users`.`u_id`
)
AND `all_users`.`user_name` = "docter"
AND `all_users`.`password` = "123"

كد بالا برام اطلاعات مياره ولي همه ي كاربراني كه تو all_user هستن رو نمايش ميده...
و وقتي هم به جاي اون تنها or كه هست and ميذارم هيچي نمياره
:(
بازم ممنون

Veteran
دوشنبه 06 آبان 1392, 21:06 عصر
Select
hasan.doctor_users.*,
hasan.people_users.*
From
all_users left Join
doctor_users On doctor_users.u_id = all_users.id left Join
people_users On people_users.u_id = all_users.id
where all_users.user_name = 'docter'
AND all_users.password = 123


البته فکر کنم دیتابیس ی نرمال سازی کنی بهتره
برای مثال :
فیلد های
name
family
age
gender
و...
در 2 جدول هستند.بهتره که اینارو جداگانه بزاری توی ی جدول مثلا user_info
بعد ایدی اون اطلاعات کاربر که در user_info هست رو بیای توی این جداول استفاده کنی

H:Shojaei
دوشنبه 06 آبان 1392, 21:36 عصر
قربونت سبحان جان ممنونم ;)
يه توضح كوچولو هم ميشه بدي دربارش كه لااقل ياد هم بگيريمش :)
بازم ممنون...

H:Shojaei
دوشنبه 06 آبان 1392, 23:00 عصر
سبحان جان يه مشكل ديگه:
الان واسه واكشي از 3 تا جدول با همون سبك قبلي از اين كد استفاده كردم:

SELECT *
FROM `all_users`
LEFT JOIN `doctor_users` ON `doctor_users`.`u_id` = `all_users`.`id`
LEFT JOIN `people_users` ON `people_users`.`u_id` = `all_users`.`id`
LEFT JOIN `admin_users` ON `admin_users`.`u_id` = `all_users`.`id`
WHERE `all_users`.`id` = 3

اين تمام فيلدهاي همه ي جدولا رو مياره و وقتي ميخوام اطلاعات رو واكشي كنم اين اطلاعاتي كه اولن رو برام نمايش ميده مثلا بعضيهاش خاليه...
ولي يعضي هم پر چكارش كنم...
بازم ممنون

Veteran
سه شنبه 07 آبان 1392, 08:25 صبح
اين تمام فيلدهاي همه ي جدولا رو مياره و وقتي ميخوام اطلاعات رو واكشي كنم اين اطلاعاتي كه اولن رو برام نمايش ميده مثلا بعضيهاش خاليه...
ولي يعضي هم پر چكارش كنم...
بازم ممنون علت اینکه این یوزر شماره 3 توی جدول people وجود نداره/یعنی کاربری با u_id 3 نداریم و چون ما از left join استفاده کردیم اینجور میشه
وقتی از left join استفاده میکنیم اگر سطر های جدول سمت چپ حتی در جدول سمت راست هم نباشه رو نمایش میده اما خالی !
مثلا
LEFT JOIN `doctor_users` ON `doctor_users`.`u_id` = `all_users`.`id`
خب اینجا ما توی جدول doctor_users یک رکورد با u_id 3 داریم و به درستی نمایش میده
LEFT JOIN `people_users` ON `people_users`.`u_id` = `all_users`.`id`

اینجا در جدول people_users رکوردی با u_id 3 نداریم به همین دلیل خالی میشه.
خب راه حل اینکه شما به جای left join از inner join استفاده کنید
inner join میگه که اگه اطلاعات رو میارم در صورتی که حداقیل یک همخوانی در هردو جدول داشته باشیم
مثلا در جدول all_users که یک رکورد با ایدی 3 داریم اگر در جدول people هم u_id 3 داشتیم من اطلاعات رو میارم وگرنه نمیارم.
اما left join میگه اگر 2 جدول اطلاعاتش با توجه به شرطی که گذاشتیم همخوانی داشت خب میارم اگرم نداشت بازم میارم اما مقداری نداره و نمیارم

H:Shojaei
چهارشنبه 08 آبان 1392, 02:57 صبح
سبحان جان بازم ممنون
من اين كد رو زدم درست نشد يعني هيچي برام نمياره يه نگاش ميكني بي زحمت:

SELECT *
FROM `all_users`
INNER JOIN `doctor_users` ON `doctor_users`.`u_id` = `all_users`.`id`
INNER JOIN `people_users` ON `people_users`.`u_id` = `all_users`.`id`
INNER JOIN `admin_users` ON `admin_users`.`u_id` = `all_users`.`id`
WHERE `all_users`.`id` = 3

بازم ممنون

mahmod2000
چهارشنبه 08 آبان 1392, 07:44 صبح
اینو تست کنید


SELECT `all_users.*`,`doctor_users.*`,`people_users.*`,`a dmin_users.*`
FROM `all_users`
INNER JOIN `doctor_users` ON `all_users`.`id` = `doctor_users`.`u_id`
INNER JOIN `people_users` ON `all_users`.`id` = `people_users`.`u_id`
INNER JOIN `admin_users` ON `all_users`.`id` = `admin_users`.`u_id`
WHERE `all_users`.`id` = 3

H:Shojaei
چهارشنبه 08 آبان 1392, 12:20 عصر
ممنونم ولي
خب اين كه همون كد خودمه كه فقط جدولا يكي يكي انتخاب شدن كه طريقه درستشم اينطوريه:

`all_users`.*

Mostafa_G2
چهارشنبه 08 آبان 1392, 14:36 عصر
دوست عزیز از INNER JOIN باید استفاده کنی.
ضمنن سوالت رو دقیق و کامل بپرس تا سریع تر کارت راه بیوفته, مثلا نگو "ID ميره تو دو تا جدول ديگه تقسيم ميشه" همین ID که میگی کلید خارجی توی اون دوتا جدوله.
سوالت رو دقیق بپرس تا جوابت رو دقیق بهت بگم.

H:Shojaei
چهارشنبه 08 آبان 1392, 15:58 عصر
ممنون
آره اين آي دي كليد خارجي تو دوتا جدوله يعني اين آي دي اول ايجاد ميشه كه تو جدول اصلي كليد اصليه بعد همين آي دي بسته به نوع كاربر تو جدول مربوطه هم درج ميشه كه تو اون جدول كليد خارجيه...