PDA

View Full Version : پیدا کردن تاپیک ها پر بازدید از بین 20 جدول ؟؟؟



aminghaderi
سه شنبه 06 دی 1390, 03:32 صبح
با سلام و عرض احترام خدمت دوستان و اساتید گرامی.
وب سایتی هست که 20 جدول دارد و در هر جدول حدود 300 رکورد دارد.
فیلدی در هر رکورد برای محاسبه تعداد بازدید برای آن رکورد در نظر گرفته شده است.

حالا سوال من این هست که چطوری این 20 تا جدول را با هم JOIN کنم و چطوری 5 تا MAX آخر این تیبل ها رو پیدا کنم؟؟؟
و چطور رکورد ها رو در این بازه (5 مورد از همه بالاتر ) از جداول واکشی کنم؟؟


به راهنمایی های شما امید دارم.
با تشکر فراوان.

aminghaderi
سه شنبه 06 دی 1390, 04:17 صبح
کارهایی که کردم :



CommandText = "Select * From S_1 " +
" inner join S_2 on S_1.CounterVisit=S_2.CounterVisit" +
" inner join S_3 on S_2.CounterVisit=S_3.CounterVisit" +
" inner join S_4 on S_3.CounterVisit=S_4.CounterVisit" +
" inner join S_5 on S_4.CounterVisit=S_5.CounterVisit" +
" where CounterVisit='200'";



خطایی که می گیرد :

Ambiguous column name 'CounterVisit'.

Felony
سه شنبه 06 دی 1390, 08:19 صبح
برای اینکه اسم فیلدهاتون با هم یکی هست , باید برای جداولتون یک Alias در نظر بگیرید و از اون Alias استفاده کنید : http://sqlzoo.net/howto/source/u.cgi/err918/sqlserver

baktash.n81@gmail.com
سه شنبه 06 دی 1390, 12:38 عصر
سلام ...

این جداول چه ارتباطی باهم دارن ؟ چرا باید Join کنی ؟ یکم بیشتر توضیح بده ...

اگه رکورد ها ربطی به هم ندارند می تونی جداول رو باهم Union کنی بعد بر اساس تعداد بازدید Order by desc کنی و در آخر Top 5 رو در بیاری ...

aminghaderi
شنبه 10 دی 1390, 10:33 صبح
برای اینکه اسم فیلدهاتون با هم یکی هست , باید برای جداولتون یک Alias در نظر بگیرید و از اون Alias استفاده کنید : http://sqlzoo.net/howto/source/u.cgi/err918/sqlserver
متاسفانه زیاد سر در نیاوردم. (اسکیوالم خوب نیست.)
اگر امکان داره روی همین مثال من این Alias رو برام توضیح بدید خیلی ممنون می شم.(اگر زیاد وقتتون رو نمی گیره.)


این جداول چه ارتباطی باهم دارن ؟ چرا باید Join کنی ؟ یکم بیشتر توضیح بده ...

اگه رکورد ها ربطی به هم ندارند می تونی جداول رو باهم Union کنی بعد بر اساس تعداد بازدید Order by desc کنی و در آخر Top 5 رو در بیاری ...

به هم ربط پیدا نمی کنند و این فیلد CounterVisit که از به هیچ عنصری نه داخل جدول و نه به عنصری از جدولی دیگه وصل نشده و کاملا مستقل هست.
دلیل join کردن شاید ضعف اطلاعات من در اسکیوال باشه ، وگرنه مهم نیست به چه صورت این کار صورت بگیره ، مهم خروجی هست.
خیلی از سایت ها رو شما احتمالا دیدید که یه بخشی به عنوان "مطالب پر بیننده" دارند ، که کار این قسمت فقط یه select به دیتابیس سایت هست که حالا شامل n جدول (معمولا هر بخشی رو در یک جدول نگه داری می کنند) هست ، حالا من هم برای یکی از سایت هام می خوام این مورد رو پیاده سازی کنم ، اما موندم ؟!
Order by desc رو بلدم ، اما Union رو نمی دونم ، اگر امکانش هست روی همین مثال من نمونش رو توضیح بدید ، خیلی ممنون می شم ، البته اگر زیاد وقتتون رو نمی گیره.

با سپاس فراوان از راهنماییتان.

baktash.n81@gmail.com
یک شنبه 11 دی 1390, 18:20 عصر
در مورد اینکه اطلاعات هر بخش در یه جدول جدا نگهداری بشه ... زیاد مطمئن نیستم که دزست باشه ...

اما Union

Select F1,F2 From T1
Union All
Select F1,F2 From T2
و الی آخر

aminghaderi
یک شنبه 11 دی 1390, 21:31 عصر
در مورد اینکه اطلاعات هر بخش در یه جدول جدا نگهداری بشه ... زیاد مطمئن نیستم که دزست باشه ...

اما Union

Select F1,F2 From T1
Union All
Select F1,F2 From T2
و الی آخر
شما حساب تصور کنید هر بخش شما شامل 2000 رکورد بشه و هر رکورد هم یه مقاله باشه ؟!
حداقل برای وصل شدن به دیتابیس به صورت ریموت ، شما در نظر بگیرید چه اتفاقی می افتد.... الان من با حداکثر 200 رکورد به مشقت می تونم اطلاعات رو ویرایش کنم ، البته خیلی کم پیش می آید ولی خوب یکی از مشکلات دیتاهای حجیم فکر کنم همین می شه ، و برای همین هر بخش شده یه جدول تا هم در Select گیری ها سرعت رو بالاتر شود و هم در اجرای فرامین SQL ، حالا تا چه حد این کار می تونه درست باشه ، را نمی دونم .

برای Union تا جایی که متوجه شدم F1 و F2 فیلدها هستند و T1 و T2 جداول ، حالا نتیجه چه می شود؟؟
یک جدول متشکل از فیلد F1 و F2 از جداول T1 و T2 و نهایتا Tn درست متوجه شدم؟؟

mohdeL
یک شنبه 11 دی 1390, 23:03 عصر
با سلام
توضیحunion:
ببینید این دستور میاد ستون های مورد نظر جدول ها را زیر هم قرار می ده
پس با این دستور کل جدول ها در یک جا جمع می شوند

baktash.n81@gmail.com
سه شنبه 13 دی 1390, 09:56 صبح
آره درست متوجه شدی ... بهتره که اول اطلاعات جداول رو فیلتر کنی بعد Union کنی ... حتما هم Unino All بنویس چون سریعتره ...

Select top 5 f1,f2 from table1 order by f1
Union all
select to5 f1,f2 from table2 order by f2

با کد بالا یه View درست کن بعد Query هاتو روی اون View بزن ...