جستجوي بيشترين ركورد تكراري
سلام
من از adoquery دلفي6 و از بانك اس كيو ال سرور 2000 استفاده ميكنم.
در يه برنامه كتابداري بعد از بازگشت كتاب از امانت، اطلاعات كتاب و عضو وارد ليست سوابق ميشوند ، بنابراين اين جدول پر ازاطلاعات تكراري ميشه ، حالا ميخوام ليست كتابهايي كه بيشتر از بقيه امانت گرفته شده اند رو به ترتيب از بيشترين به كمترين مرتب كنه همينطور در باره اعضاء ، يعني بياد و ليست رو به ترتيب پركارترين اعضاء( بيشتر از بقيه امانت گرفته اند) رو مرتب كنه از پركارترين تا كم كار ترين.
چطور ميشه ؟ يعني در واقع مي خوايم ليست بانكمون رو براساس يه فيلد كه بيشتر تكرار شده مرتب كنيم تا كمترين تكرار
نقل قول: جستجوي بيشترين ركورد تكراري
سلام،
شما باید یک جدول داشته باشین که مثلا داده های زیر را در آن ذخیره می کنید (مثلا جدول امانات):
کد کاربر، کد کتاب، تاریخ امانت، تاریخ برگشت، و...
حالا دو جدول دیگه داریم که مشخصات کتاب و افراد رو ذخیره می کنین.
برای گزارش گیری در مورد بیشترین کتاب های به امانت رفته باید ابتدا جدول امانات را بر اساس ستون کد کتاب گروه بندی کنین و در لیست ستون ها Count(*) را محاسبه کنین و بر اساس آن مرتب سازی را انجام دهین. سپس برای نمایش مشخصات کتاب نتیجه ی حاصل را با جدول کتابها Join می کنید. همین کار را هم می توانین برای پر کار ترین اعضا استفاده کنید.
Select * FROM
(
Select BookID, COUNT(*) AS c
FROM Borrows
Group by BookID
) D
ORDER BY c DESC
نقل قول: جستجوي بيشترين ركورد تكراري
مشكل اينجاست كه در پنجره جستجو البته در جدول سوابق امانات ، كاربر در حين جستجو ، مثلا محدوده تاريخ مشخص ،ميخواد كتابهايي كه بيشتر امانت گرفته شده اند رو ببينه ،
در حالت كلي من اينكار رو تا اينجا انجام دادم
select * from sabegh
where
يه عالمه شرط كه در صورت درست بودنش براساس فيلدهاي خاصي جستجو ميشه .
يكي ازشرطها اينه كه ممكنه كاربر بخواد در اين جستجوهاي تو در تو بياد و ليست كتابهايي كه بيشتر امانت گرفته شده اند رو هم جستجو كنه.
بعد از اين كار براي ديدن ريز اطلاعات كتاب يا اعضاء ميام و حاصل رو با جدول كتابها يا جدول اعضاء تلفيق ميكنم.
جستجو ها مشكلي ندارن ،فقط مشاهده بيشترين كتابهاي امانت گرفته شده يا اعضاء پركار
نقل قول: جستجوي بيشترين ركورد تكراري
هنوزم منتظر راهنمايي دوستان هستم
نقل قول: جستجوي بيشترين ركورد تكراري
فکر کنم کد زیر کارت رو راه بندازه:
select b.ID,b.name,b.family from tbl1 b left outer join
(select Name,Family,Count(Name) as num from tbl1 group by Name,Family ) a
on a.name = b.name and a.family = b.family
order by num desc
اینجا ما یک tbl داریم که دارای نام و نام خانوادگی و ID هست که اونا رو بر جسب تکرار مرتب کرده
نقل قول: جستجوي بيشترين ركورد تكراري
دوباره توضيح ميدم ،در برنامه كتابداري من ،قسمتي بعنوان سوابق امانت دارم كه شامل كدعضو و شماره ثبت كتاب و تاريخ امانت و بازگشت كتاب و ديركرد .حالا مي خوام اضافه براين جستجوهاي تودرتو كه كدش رو در پايين آوردم بياد و ليست كتابهايي كه بيشتر از بقيه امانت گرفته شده اند يا اعضاي پر كار رو بياره.
with form15.ADOQuery1 do
begin
sql.Clear;
sql.Add('select * from sabegh');
sql.Add('where a>0');
if edit1.Text<>'-' then
begin
sql.Add(' and cod=:h');
parameters.ParamByName('h').Value:=edit1.Text;
end;
if edit32.Text<>'-' then
begin
sql.Add(' and cd=:m');
parameters.ParamByName('m').Value:=edit32.Text;
end;
if edit31.Text<>'-' then
begin
sql.Add(' and cj=:n');
parameters.ParamByName('n').Value:=edit31.Text;
end;
if edit5.Text<>'-' then
begin
sql.Add(' and sabt=:j');
parameters.ParamByName('j').Value:=edit5.Text;
end;
if combobox1.Text='Èáå' then
begin
sql.Add(' and tam=:k');
parameters.ParamByName('k').Value:='Èáå';
end;
if combobox1.Text='뒄' then
begin
sql.Add(' and tam=:k');
parameters.ParamByName('k').Value:='뒄';
end;
if combobox3.Text='Èáå' then
begin
sql.Add(' and dir=:l');
parameters.ParamByName('l').Value:='Èáå';
end;
if combobox3.Text='뒄' then
begin
sql.Add(' and dir=:l');
parameters.ParamByName('l').Value:='뒄';
end;
if combobox2.Text='ÈÑÇÈÑ' then
begin
if (edit26.Text='') and (edit25.Text<>'') and (edit12.Text<>'') then
begin
sql.Add('and dyb=:a and dmb:b');
parameters.ParamByName('a').Value:=edit12.Text;
parameters.ParamByName('b').Value:=edit25.Text;
end
else
if (edit26.Text='') and (edit25.Text='') and (edit12.Text<>'') then
begin
sql.Add('and dyb=:a');
parameters.ParamByName('a').Value:=edit12.Text;
end
else
if (edit26.Text<>'') and (edit25.Text<>'') and (edit12.Text<>'') then
begin
sql.Add('and dyb=:a and dmb=:b and ddb=:c');
parameters.ParamByName('a').Value:=edit12.Text;
parameters.ParamByName('b').Value:=edit25.Text;
parameters.ParamByName('c').Value:=edit26.Text;
end
else
if (edit26.Text='') and (edit25.Text<>'') and (edit12.Text='') then
begin
sql.Add('and dmb=:b');
parameters.ParamByName('b').Value:=edit25.Text;
end;
end
else
if combobox2.Text='ÈÚÏ ÇÒ' then
begin
if (edit26.Text='') and (edit25.Text<>'') and (edit12.Text<>'') then
begin
sql.Add('and (dyb=:a and dmb>=:b) or dyb>:c');
parameters.ParamByName('a').Value:=edit12.Text;
parameters.ParamByName('b').Value:=edit25.Text;
parameters.ParamByName('c').Value:=edit12.Text;
end
else
if (edit26.Text='') and (edit25.Text='') and (edit12.Text<>'') then
begin
sql.Add('and dyb>=:a');
parameters.ParamByName('a').Value:=edit12.Text;
end
else
if (edit26.Text<>'') and (edit25.Text<>'') and (edit12.Text<>'') then
begin
sql.Add('and ((dyb=:a and dmb>=:b and ddb=:c) or (dyb=:d and dmb>:e) or dyb>:f)');
parameters.ParamByName('a').Value:=edit12.Text;
parameters.ParamByName('b').Value:=edit25.Text;
parameters.ParamByName('c').Value:=edit26.Text;
parameters.ParamByName('d').Value:=edit12.Text;
parameters.ParamByName('e').Value:=edit25.Text;
parameters.ParamByName('f').Value:=edit12.Text;
end
else
if (edit26.Text='') and (edit25.Text<>'') and (edit12.Text='') then
begin
sql.Add('and dmb>=:b');
parameters.ParamByName('b').Value:=edit25.Text;
end;
end
else
if combobox2.Text='ÞÈá ÇÒ' then
begin
if (edit26.Text='') and (edit25.Text<>'') and (edit12.Text<>'') then
begin
sql.Add('and (dyb=:a and dmb<=:b) or dyb<:c');
parameters.ParamByName('a').Value:=edit12.Text;
parameters.ParamByName('b').Value:=edit25.Text;
parameters.ParamByName('c').Value:=edit12.Text;
end
else
if (edit26.Text='') and (edit25.Text='') and (edit12.Text<>'') then
begin
sql.Add('and dyb<=:a');
parameters.ParamByName('a').Value:=edit12.Text;
end
else
if (edit26.Text<>'') and (edit25.Text<>'') and (edit12.Text<>'') then
begin
sql.Add('and ((dyb=:a and dmb<=:b and ddb=:c) or (dyb=:d and dmb<:e) or dyb<:f)');
parameters.ParamByName('a').Value:=edit12.Text;
parameters.ParamByName('b').Value:=edit25.Text;
parameters.ParamByName('c').Value:=edit26.Text;
parameters.ParamByName('d').Value:=edit12.Text;
parameters.ParamByName('e').Value:=edit25.Text;
parameters.ParamByName('f').Value:=edit12.Text;
end
else
if (edit26.Text='') and (edit25.Text<>'') and (edit12.Text='') then
begin
sql.Add('and dmb<=:b');
parameters.ParamByName('b').Value:=edit25.Text;
end;
end;
sql.Add('Group by sabt,a');
execsql;
active:=true;
end;
لطفا با توجه به اين كد جواب بدين .
نقل قول: جستجوي بيشترين ركورد تكراري
منتظر راهنمايي دوستان هستم
نقل قول: جستجوي بيشترين ركورد تكراري
خيلي منتظر راهنمايي دوستان هستم :قهقهه: كجايين ؟
نقل قول: جستجوي بيشترين ركورد تكراري
فكر كنم ديگه زير پام علف سبز شده باشه
يعني هيچكي نمي دونه راه حل چيه ؟
نقل قول: جستجوي بيشترين ركورد تكراري
چند ابهام وجود داره:
در پست اول سوال به گونه ای دیگر یعنی متفاوت از مشکلتان مطرح شده است. شما گفتین می خواهین بیشترین کتابها را به ترتیب بیشترین امانتی که رفته اند مرتب کنید و در مورد اعضا هم همچنین، یعنی دنبال دو query جدا از هم هستید.
در پست دوم گفتین که می خواهین یکی از شروط مربوط به جستجو در جدول سوابق عامل "تعداد امانت های کتاب" باشد برای این منظور می توانین ابتدا جدول اصلی (سوابق یا سوابق بعد از اعمال انواع شروط) را با جدول مشتق شده ی پست دوم join کنید سپس جستجو انجام دهین.