PDA

View Full Version : استخراج تعداد رکوردهای با شرط جدید بودن از چندین جدول



sara_aryanfar
یک شنبه 13 فروردین 1391, 00:16 صبح
با سلام دوستان من 5 تا جدول دارم که تو هر کدوم اونا فیلدی داریم که وضعیت رکورد رو نشون میده یعنی اگه رکورد مشاهده نشده بود yes هست مثلا حالا می خواهیم تو 5 تا لیبل تعداد رکوردهای جدید در هر جدول رو نشون بدیم یعنی مثلا اگه نظر جدیدی اومده جلو لیبل نظر تعداد جدیدا رو بنویسیم .آیا میشه با یک کوئری این کار رو کرد اگر میشه چطوری تعداد هر جدول رو در مقدار بازگشتی مشخص کنیم

C#.net
یک شنبه 13 فروردین 1391, 01:21 صبح
می شه یه همچین کاری کرد:

select cast((select COUNT (a) from tblA) as nvarchar(50))+ ',' +
cast((select COUNT (b) from tblB) as nvarchar(50))+ ',' +
cast((select COUNT (c) from tblC) as nvarchar(50))+ ','

نتیجه کوئری همچین چیزی می شه:

145,33,65


می تونید این نتیجه رو بریزید تو یه استرینگ و با استفاده از تابع زیر نتایج رو تو یه آرایه بگیرید و به کنترل هاتون نسبت بدین

string result = Something; // Query result
string [] counts = result.Split(',');

lbl0.text = counts[0];
lbl1.text = counts[1];
lbl2.text = counts[2];

fakhravari
یک شنبه 13 فروردین 1391, 01:30 صبح
با select تو در تو و یا inner join بسازی.

sara_aryanfar
یک شنبه 13 فروردین 1391, 02:16 صبح
میشه یه نمونه از این نوع سلکت قرار بدین ممنون میشم

hamid_shrk
یک شنبه 13 فروردین 1391, 10:21 صبح
بفرمایید ، با این کوئری میتونید اینکار رو بکنید :

BEGIN
SELECT T1.IsNewCount AS IsNewCount1,T2.IsNewCount AS IsNewCount2,T3.IsNewCount AS IsNewCount3,T4.IsNewCount AS IsNewCount4,T5.IsNewCount AS IsNewCount5
FROM
(SELECT COUNT(IsNew)AS IsNewCount FROM T1 WHERE IsNew='True')AS T1,
(SELECT COUNT(IsNew)AS IsNewCount FROM T2 WHERE IsNew='True')AS T2,
(SELECT COUNT(IsNew)AS IsNewCount FROM T3 WHERE IsNew='True')AS T3,
(SELECT COUNT(IsNew)AS IsNewCount FROM T4 WHERE IsNew='True')AS T4,
(SELECT COUNT(IsNew)AS IsNewCount FROM T5 WHERE IsNew='True')AS T5
END

fakhravari
یک شنبه 13 فروردین 1391, 11:32 صبح
ALTER procedure AmarRating(@PostID int)
as
begin
SELECT isnull(convert(nvarchar(50),Sum(Rating)),'0')AS SumOfRating , isnull(convert(nvarchar(50),Count(PostID)),'0')AS CountOfPostID
FROM RatingPost where PostID=@PostID
GROUP BY PostID;
end;

ALTER PROCEDURE dbo.RatingAmar
AS
begin
SELECT TOP 6 TBLNews.NewsID, TBLNews.Title, TBLNews.Abstract, TBLNews.Contents, TBLNews.AddDate, TBLNews.img, isnull(convert(nvarchar(50),Sum(RatingPost.Rating) ),'0') AS SumOfRating, Count(RatingPost.PostID) AS CountOfPostID, Count(Comments.ID) AS CountOfID
FROM (TBLNews LEFT JOIN Comments ON TBLNews.NewsID = Comments.PostID) LEFT JOIN RatingPost ON TBLNews.NewsID = RatingPost.PostID
GROUP BY TBLNews.NewsID, TBLNews.Title, TBLNews.Abstract, TBLNews.Contents, TBLNews.AddDate, TBLNews.img
ORDER BY TBLNews.NewsID DESC;
end;

hamid_shrk
یک شنبه 13 فروردین 1391, 11:50 صبح
ALTER procedure AmarRating(@PostID int)
as
begin
SELECT isnull(convert(nvarchar(50),Sum(Rating)),'0')AS SumOfRating , isnull(convert(nvarchar(50),Count(PostID)),'0')AS CountOfPostID
FROM RatingPost where PostID=@PostID
GROUP BY PostID;
end;

ALTER PROCEDURE dbo.RatingAmar
AS
begin
SELECT TOP 6 TBLNews.NewsID, TBLNews.Title, TBLNews.Abstract, TBLNews.Contents, TBLNews.AddDate, TBLNews.img, isnull(convert(nvarchar(50),Sum(RatingPost.Rating) ),'0') AS SumOfRating, Count(RatingPost.PostID) AS CountOfPostID, Count(Comments.ID) AS CountOfID
FROM (TBLNews LEFT JOIN Comments ON TBLNews.NewsID = Comments.PostID) LEFT JOIN RatingPost ON TBLNews.NewsID = RatingPost.PostID
GROUP BY TBLNews.NewsID, TBLNews.Title, TBLNews.Abstract, TBLNews.Contents, TBLNews.AddDate, TBLNews.img
ORDER BY TBLNews.NewsID DESC;
end;
نیازی به این همه join کردن نیست !!
وقتی تعداد رکورد ها زیاد بشه پدر سیستم در میاد تا بخواد هر دفعه 5 تا جدول رو join کنه.

dorparasti
یک شنبه 13 فروردین 1391, 19:53 عصر
نیازی به این همه join کردن نیست !!
وقتی تعداد رکورد ها زیاد بشه پدر سیستم در میاد تا بخواد هر دفعه 5 تا جدول رو join کنه.

درسته . تا جایی که من می دونم کلاً join ها برای مواقعی هستن که بخواید یکسری اطلاعات مرتبط با هم رو از جداول مختلف استخراج کنید ( که البته برای همون هم راه های دیگه ای هست ) . در حالی که ایجا مقدار هر جدول مستقل از بقیه است . ولی شک من در نحوه خروجی گرفتنه . این که آیا در قالب 5 فیلد برگردونیم ( مثل query شما ) یا مثل اون یک query که در قالب یک مقدار برمیگردونه . جایی خوندم که ٍExecuteScalar سریعتر و بهینه تره و اگه بشه از اون استفاده کرد بهتره .

hamid_shrk
یک شنبه 13 فروردین 1391, 20:47 عصر
درسته . تا جایی که من می دونم کلاً join ها برای مواقعی هستن که بخواید یکسری اطلاعات مرتبط با هم رو از جداول مختلف استخراج کنید ( که البته برای همون هم راه های دیگه ای هست ) . در حالی که ایجا مقدار هر جدول مستقل از بقیه است . ولی شک من در نحوه خروجی گرفتنه . این که آیا در قالب 5 فیلد برگردونیم ( مثل query شما ) یا مثل اون یک query که در قالب یک مقدار برمیگردونه . جایی خوندم که ٍExecuteScalar سریعتر و بهینه تره و اگه بشه از اون استفاده کرد بهتره .
بله اون راه سریعتره ولی نه اونقدر ها و فقط موقع واکشی بجای 5 تا فیلد شما یک فیلد رو واکشی میکنید.
اما این یکی خوانا تره و مدیریتش راحت تر.