PDA

View Full Version : یک کوئری سخت !!



Mazda3
چهارشنبه 25 فروردین 1389, 14:30 عصر
سلام عزیزان ....
در خیلی ازسایت ها دیدید که مجموعه وجود داره و البته جلوش تعداد زیر مجموعه ها رو مینویسه ...


مثال :



» اخبار لیگ برتر ( 56 مورد )
» اخبار ترانسفر ( 45 مورد )
» اخبار مصدومان ( 67 مورد )




خوب حالا من این رو با datalist اوردم .....
و از datasource استفاده کردم که اطلاعات رو از دیتابیس بکشم بیرون ....
کسی میتونه بهم کمک بکنه که چجوری میتونم براش کوئری نبویسم ؟!:متفکر:

mehdi.mousavi
چهارشنبه 25 فروردین 1389, 14:35 عصر
سلام عزیزان ....
در خیلی ازسایت ها دیدید که مجموعه وجود داره و البته جلوش تعداد زیر مجموعه ها رو مینویسه ...


مثال :
خوب حالا من این رو با datalist اوردم .....
و از datasource استفاده کردم که اطلاعات رو از دیتابیس بکشم بیرون ....
کسی میتونه بهم کمک بکنه که چجوری میتونم براش کوئری نبویسم ؟!:متفکر:


سلام.
دستور COUNT تعداد رکوردها رو به شما بر میگردونه. هنگام نوشتن دستور SELECT میتونید توی select clause خودتون با استفاده از تابع COUNT تعداد رکورد های مورد نظر رو (بر اساس طبقه بندی موجود) بگیرید. برای اطلاعات بیشتر به BOL (http://msdn.microsoft.com/en-us/library/ms175997.aspx) رجوع کنید.

موفق باشید.

Mazda3
چهارشنبه 25 فروردین 1389, 14:40 عصر
مرسی مهدی جون ...اما نکته مهمی هست !!!
اون هم اینکه

» اخبار لیگ برتر ( 56 مورد )


کلمه ( اخبار لیگ برتر ) داره از همین دیتا سورس خونده میشه .... پس من جز COUNT باید اسم مجموعه رو هم فراخوانی کنم از اون مهم تر که عدد تعداد زیز مجموعه ها رو روبروی همون مجموعه بنویسه

اگه میتونید کمکی کنید در این کوئری .... من خیلی سعی کردم ، نشد

mehdi.mousavi
چهارشنبه 25 فروردین 1389, 14:50 عصر
مرسی مهدی جون ...اما نکته مهمی هست !!!
اون هم اینکه

» اخبار لیگ برتر ( 56 مورد )


کلمه ( اخبار لیگ برتر ) داره از همین دیتا سورس خونده میشه .... پس من جز COUNT باید اسم مجموعه رو هم فراخوانی کنم از اون مهم تر که عدد تعداد زیز مجموعه ها رو روبروی همون مجموعه بنویسه

اگه میتونید کمکی کنید در این کوئری .... من خیلی سعی کردم ، نشد

من بدون دونستم Schema جداول شما نمیتونم چنین Query ای بنویسم. ببینید، شما می تونید رکوردها رو "GROUP BY عنوان" کنید. بدین ترتیب COUNT تعداد هر گروه رو برمیگردونه. بقیه اش هم که واضحه.

موفق باشید.

Mazda3
چهارشنبه 25 فروردین 1389, 15:29 عصر
این رو ببینید



SELECT COUNT(*) AS COUNT, Tbl_order.CatId, Tbl_Category.CatName, Tbl_order.id
FROM Tbl_order INNER JOIN
Tbl_Category ON Tbl_order.CatId = Tbl_Category.id
GROUP BY Tbl_order.CatId, Tbl_Category.CatName, Tbl_order.id



من این کوئری رو نوشتم .... متاسفانه
این مدلی بهم داده پاسخ رو ( عکس ضمیمه )

4 تا مهندسی داده و جلوش نوشته 1 ...
من میخوام 41 با رمهندسی رو بنویسه و جلوش به جای 1 بنویسه 4 ... اگه هم صفر بود بنویسه صفر


خوب اینبار کامل گفتم فکر کنم ....

-- این مورد حل بشه مشکلاتم میشه 50%

salimim
چهارشنبه 25 فروردین 1389, 17:24 عصر
اينطوري جواب مي ده؟

SELECT COUNT(*) AS COUNT, Tbl_order.CatId, Tbl_Category.CatName
FROM Tbl_order INNER JOIN
Tbl_Category ON Tbl_order.CatId = Tbl_Category.id
GROUP BY Tbl_order.CatId, Tbl_Category.CatName

Mazda3
چهارشنبه 25 فروردین 1389, 19:57 عصر
مرسی .... اما یه موردی میمونه

من اون قرار دادهایی ( زیر مجموعه ها ) که تموم میشه زمانشون رو ستون PUBLISH شو 0 میکنم که تو سایت نمایش نده ....

حالا میتونیم بگیم فقط اونایی رو بشمور که ستون publish=1 باشه ؟؟؟
باید توضیح بدم که publish از جدول tbl_order گرفته میشه ....
در ضمن عزیز میخوام id هر زیر مجموعه رو هم بهم بده که بتونم لینک کنم به مجموعه

یعنی category id


راستی از همه بد تر .... این مجموعه هایی که زیر مجموعه نداره رو نمیاره اصلا ....

salimim
پنج شنبه 26 فروردین 1389, 07:50 صبح
سلام
براي شرط گذاشتن وقتي كه group by داري از having استفاده كنيد.

محمد سلیم آبادی
شنبه 28 فروردین 1389, 23:52 عصر
SELECT COUNT(*) AS COUNT, Tbl_Category.id, Tbl_Category.CatName
FROM Tbl_order
RIGHT OUTER JOIN Tbl_Category
ON Tbl_order.CatId = Tbl_Category.id
WHERE Tbl_order.Publish = 1
GROUP BY Tbl_Category.id, Tbl_Category.CatName

Mazda3
چهارشنبه 01 اردیبهشت 1389, 18:16 عصر
ادامه مشکل !!!!

حالا فقط اون دوتا مجموعه ای رو میده که کانتشون 0 نیست !!!!!! 0 رو هم باید نشون بده جلوش بنویسه صفر

نکته اینکه اگه کانت صفر باشه یعنی مجموعه ای که پابلیشش 1 باشه تهیه ... پس اصلا نمیسه این کوئری رو نوشت، درست ؟

محمد سلیم آبادی
چهارشنبه 01 اردیبهشت 1389, 19:23 عصر
اینو امتحان کنید:


SELECT COUNT(O.CatId) AS COUNT, C.id, C.CatName
FROM Tbl_order O
RIGHT OUTER JOIN Tbl_Category C
ON O.CatId = C.id
WHERE O.Publish = 1
GROUP BY C.id, C.CatName

محمد سلیم آبادی
جمعه 03 اردیبهشت 1389, 17:27 عصر
اولا شدیدا ممنونم که دارین کمکم مییکنی... اما مشکل پا برجاست ....:گریه::گریه::گریه:

شما یکسری نیازها داشتین که برطرفشون کردم، مثلا بعضی از مجموعه ها که اصلا در جدول order درج نشدن را نیز نمایش دادم (با کمک OUTER JOIN). سپس می خواستین COUNT هر مجموعه را از جدول Order بدست بیارین که با کمک COUNT این کار را هم انجام دادم.

الان دقیقا نمی دونم مشکل شما کجاست.
می تونید یک نمونه از داده ها و یک نمونه از نتیجه ی مورد نظرتون رو پست کنید تا بشه بهتر روش زمان گذاشت و به جواب دقیق رسید؟

Mazda3
شنبه 04 اردیبهشت 1389, 01:08 صبح
من 3 تصویر ضمیمه کردم ....

یکیش جدول order
یکیش جدول categoory
یکیشم نتیجه

محمد سلیم آبادی
شنبه 04 اردیبهشت 1389, 01:40 صبح
SELECT COUNT(O.CatId) AS COUNT, C.id, C.CatName
FROM Tbl_order O
RIGHT OUTER JOIN Tbl_Category C
ON O.CatId = C.id
AND O.Publish = 1
GROUP BY C.id, C.CatName

محمد سلیم آبادی
یک شنبه 05 اردیبهشت 1389, 13:32 عصر
ن نمیدونم به چه زبونی ازت تشکر کنم مهندس .... خیلی بهم حال دادی ..... انشالله یه روز بتونم جبران کنم ....

مشکل بر میگشت به Publish که نبایستی در آخر کار در نظر گرفته میشد. به این نکته توجه نکرده بودم. ولی با آخرین توضیحاتی که دادین متوجه مشکل شدم.