نمایش نتایج 1 تا 9 از 9

نام تاپیک: خروجی اشتباه در اماره بازدید هر پست

  1. #1
    کاربر دائمی
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    جنوب عشق است
    پست
    1,557

    خروجی اشتباه در اماره بازدید هر پست

    سلام دوستان
    یک مشکلی که دارم و هرچقدر میگردم نمیتونم مشکل رو حل کنم
    اینکه اماره بازدید هر پست در کوئری زیر اشتباه هست !
    من یک جدول visits دارم که IP و ایدی پست رو داره
    حالا توی کوئری اومدم پست هارو جوین کردم به جدول visits که تعداد بازدید هرپست رو در بیارم
    اما خروجی اشتباه هست ! مثلا من 5 تا رکورد با پست ایدی 3 دارم اما خروجی ی چیزه دیگه اس
    ممنون میشم کوئری رو برررسی کنید
    دیتابیس هم پیوست شد

    Select
    content_list.id,
    content_list.title,
    content_list.des,
    content_list.date,
    content_list.tags,
    content_list.parent,
    content_list.parent as `visits`,
    content_list.parent as `catid`,
    content_list.parent as `cComments`,
    content_list.parent as `images`

    From
    content_list
    Where
    content_list.parent = 0
    Union
    Select
    content_list.id,
    content_list.title,
    content_list.des,
    content_list.date,
    content_list.tags,
    category_list.title As `title1`,
    count(vt.pid) As `visits`,
    category_list.id As `catid`,
    count(distinct comments.id) As `cComments`,
    group_concat( distinct image) as `images`
    From
    content_list
    left join
    visits as vt
    on content_list.id=vt.pid
    inner join
    category_list On content_list.parent =
    category_list.id
    left join
    comments on comments.status='0' and comments.pid=content_list.id

    left join
    content_image as ci
    on
    ci.content_id=content_list.id
    left join
    images
    on images.id=ci.image_id
    Group By
    content_list.id

    Order By

    date Desc
    فایل های ضمیمه فایل های ضمیمه
    • نوع فایل: rar db.rar‏ (1.2 کیلوبایت, 1 دیدار)
    آخرین ویرایش به وسیله Veteran : جمعه 24 آبان 1392 در 19:04 عصر

  2. #2
    کاربر دائمی آواتار ابوذر محمودی
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    تربت حیدریه
    پست
    476

    نقل قول: خروجی اشتباه در اماره بازدید هر پست

    الان خروجی چی برمیگردونه؟

  3. #3
    کاربر دائمی
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    جنوب عشق است
    پست
    1,557

    نقل قول: خروجی اشتباه در اماره بازدید هر پست

    تعداد بازدید برای پست با ایدی 3
    10 تا برمیگردونه/درصورتی که من توی جدول visits فقط 5 تا رکورد با پست ایدی 3 دارم

  4. #4

    نقل قول: خروجی اشتباه در اماره بازدید هر پست

    خوب چرا Join ؟ این کوئری جواب نمیده؟
    SELECT COUNT(*) AS `total` FROM `visits` WHERE (`pid`='3')

  5. #5
    کاربر دائمی
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    جنوب عشق است
    پست
    1,557

    نقل قول: خروجی اشتباه در اماره بازدید هر پست

    خب این کوئری که نوشتم میاد تمام پست ها با اطلاعاتشون :
    اسم عکس ها
    تعداد نظرات
    مطلب و عنوان مطلب
    و ...
    در قالب یک رکورد به خروجی میبره،10مثلا تا پست 10 تا رکورد

    یکی دیگه از اطلاعاتی که میخوام اینکه هر پست چه تعداد باز دید داشته
    ===
    الان با این کد شما خب من باید بیام روی تمام مطالب یک حلقه بزنم و pid رو تغییر بدم دیگه درسته ؟ که فکر نکنم مناسب باشه
    این کد زمانی مناسب هست که فقیط من بخوام تعداد بازدید رو به دست میارم/اما من اطلاعات دیگه ایی که در دیگر جدول ها هم هست رو نیاز دارم

  6. #6
    کاربر دائمی آواتار ابوذر محمودی
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    تربت حیدریه
    پست
    476

    نقل قول: خروجی اشتباه در اماره بازدید هر پست

    من بعد یک ساعت و نیم حرکت لاک پشتی به این نتیجه رسیدم که این کد داده های تکراری واکشی میکنه :
     left join
    content_image as ci
    on
    ci.content_id=content_list.id


    مغز من که هنگ کردم ، این همه join !!!؛ بیچاره سرور دمار از روزگارش در میاد .
    من برای جاهایی که نال میده شرط گذاشتم کوئری درست جواب داد.


    Select
    content_list.id,
    content_list.title,
    content_list.des,
    content_list.date,
    content_list.tags,
    category_list.title As `title1`,
    count(vt.pid) As `visits`,
    category_list.id As `catid`,
    count(distinct comments.id) As `cComments`,
    group_concat( distinct image) as `images`
    From
    content_list
    left join
    visits as vt
    on content_list.id=vt.pid
    inner join
    category_list On content_list.parent =
    category_list.id
    left join
    comments on comments.status='0' and comments.pid=content_list.id

    left join
    content_image as ci
    on
    ci.content_id=content_list.id
    left join
    images
    on images.id=ci.image_id where images.id <> NULL
    Group By
    content_list.id

    Order By

    date Desc

    باید ببینی چرا کد تکراری میده ، شرطشو درست کن

  7. #7

    نقل قول: خروجی اشتباه در اماره بازدید هر پست

    نقل قول نوشته شده توسط Veteran مشاهده تاپیک
    خب این کوئری که نوشتم میاد تمام پست ها با اطلاعاتشون :
    اسم عکس ها
    تعداد نظرات
    مطلب و عنوان مطلب
    و ...
    در قالب یک رکورد به خروجی میبره،10مثلا تا پست 10 تا رکورد

    یکی دیگه از اطلاعاتی که میخوام اینکه هر پست چه تعداد باز دید داشته
    ===
    الان با این کد شما خب من باید بیام روی تمام مطالب یک حلقه بزنم و pid رو تغییر بدم دیگه درسته ؟ که فکر نکنم مناسب باشه
    این کد زمانی مناسب هست که فقیط من بخوام تعداد بازدید رو به دست میارم/اما من اطلاعات دیگه ایی که در دیگر جدول ها هم هست رو نیاز دارم
    درسته برای همه رکوردها، نوشتن کوئریهای جداگانه بهینه نیست ولی باید دقت کنید که استفاده مناسب از Join مستلزم طراحی خوب Schema و Relationهای مربوطه هست و اینکه از چه Join خاصی استفاده کنیم هم بستگی به طراحی دیتابیس و نیاز ما داره. مثلاً ممکنه یکجا LEFT OUTER JOIN مناسب باشه و جای دیگه NATURAL JOIN یا مثلاً INNER JOIN و...
    ضمناً درمورد کوئری جداگانه هم همیشه نمیشه با اطمینان گفت که بهینه نیست. مثلاً اگه جداول به خوبی پیوند نداشته باشن یا از MyISAM استفاده کنید و Relationها و Foreign Keyها به درستی تنظیم نشده باشه (حتی در نوع ارتباط مثل RESTRICT یا CASCADE و...) اونوقت JOIN خودش سربار وحشتناکی ایجاد خواهد کرد. کوئری جداگانه حداقل مزیتش اینه که سرباری که میگذاره در اکثر مواقع فقط روی کد هست (کد بیشتری باید بنویسید) که اون رو هم میشه با استفاده صحیح از حلقه ها و توابع کاهش داد.

  8. #8
    کاربر دائمی آواتار ابوذر محمودی
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    تربت حیدریه
    پست
    476

    نقل قول: خروجی اشتباه در اماره بازدید هر پست

    نقل قول نوشته شده توسط Veteran مشاهده تاپیک
    خب این کوئری که نوشتم میاد تمام پست ها با اطلاعاتشون :
    اسم عکس ها
    تعداد نظرات
    مطلب و عنوان مطلب
    و ...
    در قالب یک رکورد به خروجی میبره،10مثلا تا پست 10 تا رکورد

    یکی دیگه از اطلاعاتی که میخوام اینکه هر پست چه تعداد باز دید داشته
    ===
    الان با این کد شما خب من باید بیام روی تمام مطالب یک حلقه بزنم و pid رو تغییر بدم دیگه درسته ؟ که فکر نکنم مناسب باشه
    این کد زمانی مناسب هست که فقیط من بخوام تعداد بازدید رو به دست میارم/اما من اطلاعات دیگه ایی که در دیگر جدول ها هم هست رو نیاز دارم
    نیازی نیست که با حلقه pid رو تغییر بدین با یک کوئری ساده میشه اینکارو کرد:

    SELECT id , COUNT(*) TotalCount
    FROM content_list,visits
    where content_list.id=visits.pid
    GROUP BY id
    ORDER BY TotalCount DESC

  9. #9
    کاربر دائمی
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    جنوب عشق است
    پست
    1,557

    نقل قول: خروجی اشتباه در اماره بازدید هر پست

    وقتی گفتین داره داده تکراری برمیگردونه
    رفتم کد رو به inner join تغییر دادم و درست شد

    inner join
    images
    on images.id=ci.image_id

    تشکر از دوست عزیزم جناب محمودی و استاد بزرگوار جناب شهرکی که هر پستشون خودش یک دوره اموزشیه

تاپیک های مشابه

  1. سوال: خروجی اشتباه تابع date
    نوشته شده توسط parsin در بخش PHP
    پاسخ: 1
    آخرین پست: یک شنبه 21 مهر 1392, 22:09 عصر
  2. سوال: اجرای برنامه ی درست با خروجی اشتباه
    نوشته شده توسط pooyanre در بخش C#‎‎
    پاسخ: 3
    آخرین پست: شنبه 16 دی 1391, 23:11 عصر
  3. سوال: اشتباه در خروجی
    نوشته شده توسط R abbasi در بخش برنامه نویسی با Borland C++‎ Builder
    پاسخ: 0
    آخرین پست: یک شنبه 25 بهمن 1388, 15:02 عصر
  4. پست اشتباه
    نوشته شده توسط s.mostafa.rahmani در بخش گفتگو با مسئولین سایت، درخواست و پیشنهاد
    پاسخ: 7
    آخرین پست: چهارشنبه 30 مرداد 1387, 07:19 صبح
  5. شمارشگر بازدید کنندگان از سایت
    نوشته شده توسط mohammadreza-jam در بخش ASP.NET Web Forms
    پاسخ: 8
    آخرین پست: شنبه 23 مهر 1384, 08:52 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •