View Full Version : Select از دو جدول
profnami
شنبه 19 تیر 1389, 11:24 صبح
سلام دوستان .
من یه Query میخواستم بگیرم از دوتا جدول . به این صورت که از جدول اول من UserId و Username رو Select میکنم و از جدول دوم میخوام بر اساس UserId موجود در جدول اول (که Select کردم ) تعداد مقالات رو Select کنم .
تقریبا یه همچین چیزی میشه :
SELECT UserId,Username FROM tbl1
SELECT Count(Article) WHERE UserId=@UserId
میخوام این دو تا Query رو ادغام کنم
ممنون
ahrimaneahurai
شنبه 19 تیر 1389, 11:56 صبح
بین userid دو تا جدولت join کن.
join از جدول اصلیت که username هست به اون یکی جدولت باشه چون امکان داره یک یوزر مقاله ای نداشته باشه
aghayex
شنبه 19 تیر 1389, 12:57 عصر
select UserId,Username,(select Count(Article) from tbl2 where UserId=tbl1.UserId) from tbl1
L_eskandary
شنبه 19 تیر 1389, 13:01 عصر
سلام دوست عزیز :
خوب اگه فرض کنیم که اسم جدول دوم Article باشه و یه فیلد هم با نام Article_id توش داشته باشیم و userId هم بعنوان کلید خارجی تو این جدول باشه کافیه به صورت زیر عمل کنین :
select tbluser.userID , username , count(Article_id) from
tbluser inner join tblArticle on tbluser.userId=tblArticle.userId
group by tbluser.userID , username
موفق باشین.
profnami
شنبه 19 تیر 1389, 23:08 عصر
خوب دوستان
ممنونم از راهنماییتون
اما متاسفانه من با وجود راهنمایی شما هم نتونستم کوئری رو بنویسم
ببینید در ساده ترین حالت دو تا جدول رو در نظر میگیریم :
جدول کاربران : UserID , UserName
جدول مقالات :ArticleID,UserID
من این رو نوشتم :
SELECT UserID,UserName FROM Users Inner Join SELECT Count(ArticleID) FROM Articles WHERE UserID=Users.UserID
ممنون میشم راهنماییم کنید .
راستش من در SQL مبتدی هستم فقط 4 تا دستور اصلیش رو اون هم به صورت ناقص بلد هستم . ممنون میشم یک مقاله یا کتاب هم در زمینه ی یادگیری بهم معرفی کنید
L_eskandary
یک شنبه 20 تیر 1389, 00:23 صبح
دوست عزیز
ظاهرا شما به کدهایی که نوشته شدن کم توجه بودین.
تو کدهایی که من نوشتم فقط کافیه به جای tbluserنام جدول مربوط به کاربران خودتون رو بنویسین و به جای tblArticleهم نام جدول مربوط به مقالات خودتون رو . و بعد از اون نیاز به هیچ کار نیست .
موفق باشین .
profnami
یک شنبه 20 تیر 1389, 20:02 عصر
ممنون دوست عزیز . راستش چون زیاد با کپی و Paste کردن موافق نیستم مخصوصا وقتی از کدی سر در نمیارم خودم کد رو کمی دستکاری کردم . من دقیقا جایگزین کردم و به این صورت در اومد :
select Users.Username , count(ArticleID) from
Users inner join Article on Users.Username=Articles.AuthorID
group by Users.Username
اما پیام خطا میده :
System.Data.SqlClient.SqlException: Invalid object name 'Article'.
مطمئنم که یه جایی رو اشتباه نوشتم .
ببینید هدف من اینه : میخوام در کنار اسم کاربران تعداد مقالات ارسال شده رو هم نشون بدم به این صورت :
نادر مینایی (23 مقاله )
در select کردن اسم کاربر ها مشکلی نیست . اما باید تعداد مقالاتی رو که هر کاربر فرستاده هم select بشه که اون هم به تنهایی مشکلی نداره . من در جدول مقالات (Article) یک فیلد برای ذخیره سازی نام کاربر دارم و در واقع در جدول مقالات Username رو ذخیره میکنم .
کجای کد رو اشتباه نوشتم
با تشکر
mohsenyazarloo
دوشنبه 21 تیر 1389, 19:49 عصر
سلام دوست عزيز
زياد با دستورات تلفيق توي SQL آشنا نيستي اين دو تا جدول مستقيما به هم ارتباط ندارند براي استفاده از دو جدولي كه ارتباط بينشون يك يا چند جدول ديگه است بايد از كلمات كليدي مرتبط استفاده كني بصور مثال :
يك جدول مشخصات با كلمه كليدي idp كه مشخصات افراد رو نگه ميداره
يك جدول براي نشرياتي كه كتاب مينويسه با كلمه كليدي AutherId و يك فيكد ارتباطي با جدول مشخصات كه همون idp هست
حالا يك جدول سوم داري كه حاوي تعداد كتابهاي اين نويسنده و يا مقالاتش هست با فيلد AutherId براي ارتباط با جدول درسته تو مي خواي تعداد كتابهايي كه اين نويسنده نوشته نمايش بدي
براي اين كار به كد زير دقت كن :
SELECT tblName1.idp,Count(AutherId) AS Tedad from tblName1 Inner Join tbName2 On tblName1.idp = tblName2.idp Inner Join tblName2 ON tblname2.AutherId = tblName3.AutherId
اميد وارم كمكت كرده باشه
profnami
دوشنبه 21 تیر 1389, 20:12 عصر
ممنونم دوست عزیز
این رو در نظر بگیرید :
جدول اول با اسم Users و فیلد های : UserID , Username
جدول دوم با اسم Articles و فیلدهای : ArticleID,Username
در واقع چون نام کاربری ها تکراری نیستند من از اون به عنوان کلید اصلی استفاده کردم .
حالا میخوام تعداد مقالاتی که هر کاربر ارسال کرده رو بدونم . اگه ساختار جداول مشکل داره بگید تا اصلاح کنم .
ممنون
L_eskandary
دوشنبه 21 تیر 1389, 20:59 عصر
سلام
اولا دلیل خطایی که دریافت میکنین :
احتمالا اسم جدول مقالاتتون رو دقیق ننوشین . من که به کدهاتون نگاه می کنم یه جا article رو دیدم و یه جا articles. به این مسئله دقت کنین .
در ضمن موقع join دو جدول ما بر اساس فیلدهای مشتر از دو جدول این کار رو انجام می دیم و میگین اونهایی رو برامون نشون بده که مثلا در مورد سوال شما username از جدول اول با usernameاز جدول دوم یکی باشن .به این ترتیب شما باید به صورت زیر عمل کنین :
select Users.Username , count(ArticleID) from
Users inner join Articles on Users.Username=Articles.username
group by Users.Username
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.