PDA

View Full Version : سوال: مشکل در کوئری بازدید از مطالب



pirmard66
چهارشنبه 08 خرداد 1392, 13:01 عصر
با سلام

من چند وقت هست دارم برای شمارش بازدید پست ها از کوئری های زیر :


select p_id,count(ip) as visitop from visit8 group by p_id order by visitop desc limit 18







و


select sum(n_visit) from visit8 where p_id=123







استفاده میکنم.

امروز شرکت ارائه هاست بهم اخطار داد که این دو کوئری دارن بیش ار حد از منابع سرور استفاده میکنن.
و سایت دان کرد.

من جدول visit8 رو خالی کردم.
ولی دوستان میشه راه حل بدید که مشکل کد ها چیه؟

من به ازای بازدید ای پی شخص رو توی یک رکورد میزارم

یعنی هر بازدید یک رکورد میسازاه..

منتظرم

pirmard66
چهارشنبه 08 خرداد 1392, 18:33 عصر
اساتید و دوستان کسی راهنمایی نمیکنه؟

H:Shojaei
چهارشنبه 08 خرداد 1392, 19:02 عصر
سلام
منظورتون واضح نيست.
ولي دراين باره:

یعنی هر بازدید یک رکورد میسازاه..
شما ميتونيد براي آي پي هاي تكراري يه فيلد كانتر بذاريد و هر بار بهش اضافه كنيد.

pirmard66
چهارشنبه 08 خرداد 1392, 19:08 عصر
هر ای پی یک بار بیشتر نمیتونه بازدید کنه....

یعنی اگه دوباره وارد بشه هیچ بازدیدی اضافه نمیشه ،البته در روز!

کجای مشکلم نامفهومه دادا؟؟

WOLF_MEHRDAD
چهارشنبه 08 خرداد 1392, 19:21 عصر
بهتره از SESSION استفاده کنید
به این صورت که اول چک کنید که قبلاً بازدید انجام شده یا نه
در غیر اینصورت عملیات بانک رو انجام بدید و SESSION رو مقدار بدید

موفق باشید

pirmard66
چهارشنبه 08 خرداد 1392, 20:35 عصر
مشکل تو چک کردن نیست...
مشکل اینه که وقتی بازدید زیاد میشه ،اجرای این کوئری باعث اورلود سرور میشه و از منابع سرور بیشتر از حد مجاز استفاده میکنه.

باید به یک شکل بهینه بشه! ولی نمیدونم چطوری!:لبخند:

H:Shojaei
چهارشنبه 08 خرداد 1392, 21:12 عصر
به عنوان مثال شما تو اين كوئري گفتيد كه هرجا آي پي 123 ديدي مقاديرشون رو جمع كن.


select sum(n_visit) from visit8 where p_id=123

خب منظور من اين بود كه براي آي پي تكراري به جاي اين كه يه سطر جديد ايجاد كنيد يه فيلد جديد اضافه كنيد كه با هر بار بازديد ++ بشه.
اين بهتر نيست؟

pirmard66
چهارشنبه 08 خرداد 1392, 21:19 عصر
به عنوان مثال شما تو اين كوئري گفتيد كه هرجا آي پي 123 ديدي مقاديرشون رو جمع كن.


select sum(n_visit) from visit8 where p_id=123

خب منظور من اين بود كه براي آي پي تكراري به جاي اين كه يه سطر جديد ايجاد كنيد يه فيلد جديد اضافه كنيد كه با هر بار بازديد ++ بشه.
اين بهتر نيست؟

نه دادا

اون p_id شناسه هر پست هستش! نه ای پی

qartalonline
چهارشنبه 08 خرداد 1392, 23:36 عصر
همون طور که آقای WOLF_MEHRDAD فرمودند بهتره از سشن یا کوکی استفاده کنید نیازی هم به ایجاد رکورد به ازای هر بازدید نیست.

بدین صورت که وقتی کاربری برای اولین بار وارد سایت میشه شما براش کوری یا سشنی را مقداردهی میکنید و یک روکود به جدول اضافه میکنید حالا اگه کاربر برای بار دوم یا بیشتر از سایت بازدید کرد هنگام بررسی سشن یا کوکی متوجه میشید و دیگه رکوردی رو اضافه نمیکنید.

engmmrj
پنج شنبه 09 خرداد 1392, 01:16 صبح
امروز شرکت ارائه هاست بهم اخطار داد که این دو کوئری دارن بیش ار حد از منابع سرور استفاده میکنن.
و سایت دان کرد.
این شرکتی که به شما اخطار داد که ان دو کوئری دارن بیش از حد از منابع سرور استفاده می کنن ، میشه بگید چه طوری فهمیدن از این دو کوئری مشکل است ؟ مگه به کد های شما دسترسی دارن ؟!
شاید مشکل از جای دیگه باشه !

plague
پنج شنبه 09 خرداد 1392, 01:44 صبح
سعی کن تا جایی که ممکنه از انجام محاسبه در هنگام کوئری گرفتن مخصوصا از تیبل های بزرگ خود داری کنید که میتونه به راحتی وبسایت رو داون کنه مخصوصا اگه کانکشن هات به صورت کلی زیاد و زمان اجراشون بالا باشه

شما به تیبل مطالبت یه فیلد اضافه کن مثلا visit_counter
بعد به ازای هر کاربری که بازدید میکنه و یدونه ردیف به visit8 اضافه میشه اون visit_counter تیبل مطلب رو یدونه افزایش بده
اینجوری دیگه در هنگام نمایش مطلب مجبور نیستی کوئری سنگین انجام بدی تا تعداد بازدید کننده ها رو در بیاری

دو نکته :
1 - برای اجرای بهینه و حرفه ای تر میتونی از تریگر استفاده کنی
2 - شما میتونی از سشن یا کوکی استفاده کنی بجای تیبل visit8

pirmard66
پنج شنبه 09 خرداد 1392, 16:42 عصر
این شرکتی که به شما اخطار داد که ان دو کوئری دارن بیش از حد از منابع سرور استفاده می کنن ، میشه بگید چه طوری فهمیدن از این دو کوئری مشکل است ؟ مگه به کد های شما دسترسی دارن ؟!
شاید مشکل از جای دیگه باشه !

والا نمیدونم دوست عزیز...
احتمالا فشاری که به سرور می اومده رو رصد کردن و به کدها رسیدن!


از همه دوستان تشکر میکنم...




سعی کن تا جایی که ممکنه از انجام محاسبه در هنگام کوئری گرفتن مخصوصا از تیبل های بزرگ خود داری کنید که میتونه به راحتی وبسایت رو داون کنه مخصوصا اگه کانکشن هات به صورت کلی زیاد و زمان اجراشون بالا باشه

شما به تیبل مطالبت یه فیلد اضافه کن مثلا visit_counter
بعد به ازای هر کاربری که بازدید میکنه و یدونه ردیف به visit8 اضافه میشه اون visit_counter تیبل مطلب رو یدونه افزایش بده
اینجوری دیگه در هنگام نمایش مطلب مجبور نیستی کوئری سنگین انجام بدی تا تعداد بازدید کننده ها رو در بیاری

دو نکته :
1 - برای اجرای بهینه و حرفه ای تر میتونی از تریگر استفاده کنی
2 - شما میتونی از سشن یا کوکی استفاده کنی بجای تیبل visit8

میشه درباره فیلد visit_counter بیشتر توضیح بدی دادا!

یعنی توی جدول visit8 اضافه اش نکنم و توی جدول مطالب اضافه کنم؟
خب بعد چطوری بهش بفهمونم اگه جدول visit8 اضافه شد توهم اضاف کن!اونم برای هر پست جدا!

بازم ممنون

pirmard66
جمعه 10 خرداد 1392, 20:19 عصر
دوستان کسی نظری نداره؟

plague
شنبه 11 خرداد 1392, 12:42 عصر
نه گفتم به تیبل مطالب اضافه کن
در ضمن مگه p_id کلید مشترک دو جدول نیست ؟ از این برای رابطه بین و تیبل استفاده کن