PDA

View Full Version : سوال: انتخاب از دو جدول



mohammad87
جمعه 23 مرداد 1388, 15:59 عصر
من يك جدول مقالات دارم كه داراي چهار ركورد code , code_article , title , date هست و جدولي ديگه بنام نظرات دارم كه دراي ركوردهاي code,code_article , name هست حالا مي خوام توي گرايد ويو اين ستون ها رو داشته باشم : title , تعداد نظرات براي هر مقاله.

مي خوام كلا توي يك دستور اين ها رو بنويسم .

كسي مي تونه بگه چجوري بايد دستورات رو توي sql بنويسم؟

محمد سلیم آبادی
جمعه 23 مرداد 1388, 16:31 عصر
SELECT title, [number of Comments]
FROM
(
SELECT a.code_article, [Number Of Comments]=COUNT(*)
FROM Article_tbl a
INNER JOIN Comment_tbl c
ON c.code_articl=a.code_article
GROUP BY c.code_article
) D
INNER JOIN Article_tbl a
ON D.code_article=a.code_article



SELECT a.title, [Number Of Comments]=COUNT(*)
FROM Article_tbl a
INNER JOIN Comment_tbl c
ON c.code_articl=a.code_article
GROUP BY a.title

mohammad87
جمعه 23 مرداد 1388, 16:35 عصر
ما كه متوجه اين كد شما نشديم ؟؟؟؟؟:گیج:
ميشه بيشتر توضيح بديد؟

محمد سلیم آبادی
جمعه 23 مرداد 1388, 16:48 عصر
مگر تا حالا query ننوشته اید؟ یا اینکه با مفهوم INNER JOIN آشنا نیستید؟

mohammad87
جمعه 23 مرداد 1388, 17:15 عصر
آقا خيلي باحلا بود .... درست شد .
حالا يك مشكل كه دارم اينه كه دستور شما فقط اونايي كه نظر دارن رو مي نويسه اونايي كه نظر ندارن رو نمي نويسه صفر .

mohammad87
جمعه 23 مرداد 1388, 17:35 عصر
كد من اين طوري شد .

SELECT a.title_article, D.[Number Of Comments]
FROM (SELECT a.code_article, COUNT(*) AS [Number Of Comments]
FROM Article AS a INNER JOIN
Comment AS c ON c.code_article = a.code_article
GROUP BY a.code_article) AS D INNER JOIN
Article AS a ON D.code_article = a.code_articleاينطوري نشون ميده :
http://www.gigaimage.com/images/pv2ra23h46wf81hmb2ys.jpg
حالا چرا مقالاتي رو كه نظر ندارن رو صفر نشون نميده ؟
مي خوام نظراتي رو كه صفر باشه رو هم نشون بده ؟

ممنون مي شم بگيد.

محمد سلیم آبادی
جمعه 23 مرداد 1388, 19:05 عصر
کافی است که به جای INNER JOIN از LEFT OUTER JOIN استفاده کنید.
بعضی وقت ها آدم یک اشتباه های کوچکی می کند.
این را امتحان کنید.


SELECT a.title, ISNULL( d.c, 0)
FROM Articles a
LEFT OUTER JOIN
(
SELECT code_article ,c= COUNT(*)
FROM Comments
GROUP BY article_code
) D
ON d.code_article=a.code_article

mohammad87
جمعه 23 مرداد 1388, 22:36 عصر
آقا خيلي باحال بود ... واقعا كمك كرد ...كار مي كنه ممنون.

به قسمت دوستام اضافه كردمت :قلب:

mohammad87
شنبه 24 مرداد 1388, 00:06 صبح
سلام يك سوال داشتم :

SELECT a.title_article, D.[Number Of Comments]
FROM (SELECT a.code_article, COUNT(*) AS [Number Of Comments]
FROM Article AS a INNER JOIN
Comment AS c ON c.code_article = a.code_article
GROUP BY a.code_article) AS D INNER JOIN
Article AS a ON D.code_article = a.code_article
توي كد بالا اگه بخواهيم ركورد date_comment رو هم نشون بديم چكار بايد بكنيم؟

محمد سلیم آبادی
شنبه 24 مرداد 1388, 00:18 صبح
فیلد (ستون) date_commnet مربوط به کدام comment ؟ آخرین comment ؟

mohammad87
شنبه 24 مرداد 1388, 12:31 عصر
من يك دونه جدول بنام comment دارم كه داراي فيلد date_commnet هسته . حالا مي خوام بر اساس همون كد بالا فيلد date_commnet رو هم نشون بده .
اگه ابتداي كد بنويسم a.date_article مياد تاريخ مقالات رو نشون ميده ولي من تاريخ ثبت نظر رو مي خوام كه توي جدول comment بنام فيلد date_comment هسته.

محمد سلیم آبادی
شنبه 24 مرداد 1388, 13:24 عصر
شما می خواهید یک ستون برای نام مقاله و یک ستون برای تعداد نظرها و یک ستون برای تاریخ نظر داشته باشید، درست است؟

خوب برای مثال یک مقاله چندین نظر دارد تاریخ کدام نظر را می خواهید در خروجی نمایش دهید ؟ آخرین نظر یا ...؟

چرا از query پست شماره 7 نمی خواهید استفاده کنید.


SELECT a.title, ISNULL( d.c, 0), ISNULL(d.d, 0)
FROM Articles a
LEFT OUTER JOIN
(
SELECT code_article ,c= COUNT(*), d=MAX(date_coment)
FROM Comments
GROUP BY article_code
) D
ON d.code_article=a.code_article

mohammad87
شنبه 24 مرداد 1388, 13:48 عصر
آقا سليم ... خيلي آقايي ، جواب داد ... :قلب:
يك چيزي اين
MAX(date_comment) AS d يعني چي؟

ممكنه بعدا بازم مزاحمت بشم :خجالت:

محمد سلیم آبادی
شنبه 24 مرداد 1388, 13:57 عصر
تابع MAX بزرگترین مقدار را از یک مجموعه بدست می آورد. پس عبارت مورد نظر بزرگترین تاریخ یعنی جدیدترین تاریخ (آخرین تاریخ) را باید بدست آورد.

اگر علاقه زیادی به این موضوع ها دارید به شما توصیه می کنم که مقاله بنده را که در زمینه توابع Aggregate و تابع Case است را مطالعه کنید تا بلکه آشنایی بیشتری با اینگونه مسائل پیدا کنید.

برای اینکه تاپیک مورد نظر را پیدا کنید یک جستجو با استفاده از tag , کلمه case انجام دهید.