آژانس هواپیماییexchanging

این روش query گرفتن رو کی بلده !

شروع موضوع توسط shayanblue ‏30 نوامبر 2005 در انجمن PHP

  1. shayanblue

    shayanblue کاربر تازه وارد

    تاریخ عضویت:
    ‏18 مارس 2005
    نوشته ها:
    14
    تشکر شده:
    6
    محل سکونت:
    localhost
    سلام دوستان کسی میتونه به من کمک کنه که چطور از یک table در دیتابیس mysql رکورد بگیرم طوری که اولویت با مواردی باشه که بیشتر تکرار شده باشن ممنون میشم راهنمایی کنین.
     
  2. shayanblue

    shayanblue کاربر تازه وارد

    تاریخ عضویت:
    ‏18 مارس 2005
    نوشته ها:
    14
    تشکر شده:
    6
    محل سکونت:
    localhost
    دوستان کسی نمی تونه یه سر نخ به من بده ! قبلآ خیلی زود تر به موضوع های مطرح شده جواب داده میشد مدیر این قسمت از انجمن یا هر کدوم از اساتید جواب سوال من رو بدن ممنون میشم.
     
  3. Parsa_361

    Parsa_361 کاربر فعال صفحات داینامیک کاربر فعال

    تاریخ عضویت:
    ‏5 آگوست 2005
    نوشته ها:
    889
    تشکر شده:
    10
    محل سکونت:
    Isfahan, php.ini
    :D
    فکر کنم بهترین راه این باشه ! :

    اول تمام رکورد ها رو به صورت نا مرتب بگیر و توی یه آرایه بریز !
    و بعد به وسیله ی PHP راحت میشه مرتب کرد !
     
  4. shayanblue

    shayanblue کاربر تازه وارد

    تاریخ عضویت:
    ‏18 مارس 2005
    نوشته ها:
    14
    تشکر شده:
    6
    محل سکونت:
    localhost
    پارسا جان چیزی که شما به اون اشاره کردین به ذهن خودمم رسید ولی باسه رکورد های با تعداد بالا فکر نکنم راه حل مناسبی باشه برای همین رفتم سراغ دستورات sql ولی تا الان به نتیجه ی نرسیدم!
     
  5. mazoolagh

    mazoolagh Registered User

    تاریخ عضویت:
    ‏10 آپریل 2004
    نوشته ها:
    2,940
    تشکر شده:
    7
    من با MSSQL میتونم راهنماییت کنم ولی MySQL ندارم که تست کنم!
     
  6. Parsa_361

    Parsa_361 کاربر فعال صفحات داینامیک کاربر فعال

    تاریخ عضویت:
    ‏5 آگوست 2005
    نوشته ها:
    889
    تشکر شده:
    10
    محل سکونت:
    Isfahan, php.ini
    :blink: :blink:
    این جوری که بهتره !! :blink:
    مگه نمی خوای رکورد ها رو به ترتیب خاصی ار db بگیری ؟
    پس بالاخره باید تمام رکورد ها رو بگیری !!!
    اگه بخوای که با یک تریب خاص هم بگیری که دیگه خیلی سرعت کار رو میاره پایین !
    پس بهتره کار مرتب کردن رو بزاری به عهده ی PHP !
    چون PHP هم قدرت بالاتری داره و هم سرعت خیلی بالا تر !!!!
    هر چقدر هم که تعداد رکورد ها زیاد باشه فکر نکنم PHP کم بیاره ! :D
    حالا مگه تعداد رکورد هات چقده ؟ :D
     
  7. appbannerkhuniresbanner
  8. balabala

    balabala کاربر قدیمی پرشین تولز

    تاریخ عضویت:
    ‏22 می 2005
    نوشته ها:
    7,350
    تشکر شده:
    1,322
    محل سکونت:
    یه خورده اونورتر
    فکر نکنم تفاوتی بکنه ها؟ :)
     
  9. mazoolagh

    mazoolagh Registered User

    تاریخ عضویت:
    ‏10 آپریل 2004
    نوشته ها:
    2,940
    تشکر شده:
    7
    بعضی چیزها هست که در یکی هست و در دیگری نیست مثلا limit در MSSQL نیست
     
  10. setareh2

    setareh2 Registered User

    تاریخ عضویت:
    ‏24 ژانویه 2005
    نوشته ها:
    647
    تشکر شده:
    2
    محل سکونت:
    OC
    بهترین حالت اینه که یه تیبل دیگه درست کنی موقع ورود اطلاعات تو تیبل 1 به صورت کانتر تیبل 1 عمل کنه.(از 2 فیلد آی دی و کانتر تشکیل شده باشه)
    اینجوری هم استانداردتره هم موقع فراخونی ریسورس کمتری میگیره.
     
  11. setareh2

    setareh2 Registered User

    تاریخ عضویت:
    ‏24 ژانویه 2005
    نوشته ها:
    647
    تشکر شده:
    2
    محل سکونت:
    OC
    بسته به ترافیک + رم + سی پی یو + تعداد رکورد داره
    اگه تعداد رکورد + ترافیک زیاد باشه اصلا کار منطقی نیست...
     
  12. mazoolagh

    mazoolagh Registered User

    تاریخ عضویت:
    ‏10 آپریل 2004
    نوشته ها:
    2,940
    تشکر شده:
    7
    شاید من سئوال رو درست نفهمیدم ولی چرا شما میگین که باید یک جدول دیگه درست بشه. پس این domain aggregateها به چه دردی میخورن؟

    نمیدونم syntax پایین توی MySQL هم درست هست یا نه ولی توی MSSQL درسته!

    کد:
    select count(fld1) , fld1, fld2,... 
    from table_name
    where ....
    group by fld1
    order by count(fld1) desc
     
  13. sama_sally

    sama_sally Registered User

    تاریخ عضویت:
    ‏5 آپریل 2005
    نوشته ها:
    2,598
    تشکر شده:
    1
    محل سکونت:
    Essen, Deutschland
    آره درسته
    ببین مگه نمیخوای با ترتیب باشه؟
    خوب توی query مشخصه order by رو بزن
    !
     
  14. avajang.com .leftavajang.com.right
  15. setareh2

    setareh2 Registered User

    تاریخ عضویت:
    ‏24 ژانویه 2005
    نوشته ها:
    647
    تشکر شده:
    2
    محل سکونت:
    OC
    من رو حرف مازولاق حرف نمیزنم!!;)
    ولی شکل mysql کدتون این میشه:
    کد:
    select field_name, count(*) AS number
    from table_name
    GROUP BY field_name
    ORDER BY number;
    
    
    
    البته به نظر من اگه تعدا فیلدها خیلی زیاد باشه و همینطور تعداد کانکشن ها بالا باشه این کوئری چیز جالبی نیست.
    اگه یه تیبل دیگه بسازیم کوئری فقط یه sort انجام میده و هم خیلی سریعتره و هم ریسورس کمی استفاده میکنه
    اما با این کوئری هر کدوم علاوه بر sort برای تک تک فیلدهای یه فانکشن count هم انجام میده... اگه اینو تو یه دیتابیس بزرگ امتحان کنید میتونید اختلافش رو تو زمان اجرای کوئری ببینید.
     
  16. balabala

    balabala کاربر قدیمی پرشین تولز

    تاریخ عضویت:
    ‏22 می 2005
    نوشته ها:
    7,350
    تشکر شده:
    1,322
    محل سکونت:
    یه خورده اونورتر
    اینی که مازولاق گذاشت رو من توی اکسس تست کردم. اگر یک فیلد بخوایم کاملا درسته ولی اگر دوتا فیلد بخواید درست در نمیاد...​
    کد:
    select count(fld1) , fld1 
    from table_name
    group by fld1
    order by count(fld1) desc
    کار می کنه ولی:

    کد:
    select count(fld1) , fld1, fld2 
    from table_name
    group by fld1
    order by count(fld1) desc
    کار نمیکنه.
     
  17. mazoolagh

    mazoolagh Registered User

    تاریخ عضویت:
    ‏10 آپریل 2004
    نوشته ها:
    2,940
    تشکر شده:
    7
    حق با بلابلا هست - نباید هم برای بیشتر از یک فیلد کار کنه! حالا هر نوع سرور SQL که میخواد باشه . بنابراین با این روش یعنی استفاده از توابع domain aggregate نمیشه این مسئله رو حل کرد (حداقل بصورت مستقیم)
     
  18. mazoolagh

    mazoolagh Registered User

    تاریخ عضویت:
    ‏10 آپریل 2004
    نوشته ها:
    2,940
    تشکر شده:
    7
    یعنی حتما باید یک تیبل دیگه بسازیم دیگه!
     
  19. setareh2

    setareh2 Registered User

    تاریخ عضویت:
    ‏24 ژانویه 2005
    نوشته ها:
    647
    تشکر شده:
    2
    محل سکونت:
    OC
    این نظر منه! ممکنه راه بهتری هم باشه:blush:
     
  20. mazoolagh

    mazoolagh Registered User

    تاریخ عضویت:
    ‏10 آپریل 2004
    نوشته ها:
    2,940
    تشکر شده:
    7
    ارزش فکر کردن رو داره!
    کلی تکنیکها و روشهای پیچیده هست که اکثر ما از اونها بیخبریم. ممکنه این مساله با یکی از این روشها بسادگی حل بشه.
     
  21. shayanblue

    shayanblue کاربر تازه وارد

    تاریخ عضویت:
    ‏18 مارس 2005
    نوشته ها:
    14
    تشکر شده:
    6
    محل سکونت:
    localhost
    دوستان عزیز شاید شما متوجه چیزی که من گفتم نشدید ، شایدم من نتونستم منظورم رو خوب بیان کنم. با یه مثال چیزی که تو ذهنم هست رو خدمتتون توضیح میدم.

    در نظر بگیرین ما دو تا Table بصورت زیر داریم :

    PHP:
    picture:



    Columns:   | picture_id picture_name |
    _______________________________________
    Rows
    (1):   |      1     photo_one    |
    Rows(2):   |      2     photo_two    |
    Rows(3):   |      3     photo_three  |
    _______________________________________



    picture_counter
    :



    Columns:   | picture_id |    date    |
    _____________________________________
    Rows
    (1):   |      1     2005/12/03 |
    Rows(2):   |      2     2005/12/03 |
    Rows(3):   |      3     2005/12/03 |
    Rows(4):   |      1     2005/12/03 |
    Rows(5):   |      1     2005/12/02 |
    Rows(6):   |      1     2005/12/02 |
    Rows(7):   |      3     2005/12/01 |
    Rows(8):   |      2     2005/12/01 |
    Rows(9):   |      3     2005/12/01 |
    _____________________________________

    بدین ترتیب که اطلاعات مورد نظری که ما می خوایم در picture_counter ذخیره کنیم با هر بار مشاهده شدن تصاویر در این Table بصورت اتوماتیک اضافه میشن پس مقادیر این Table مدام در حال زیاد شدن هستن و ما با سطرهای محدودی روبه رو نیستیم. و مرتب کردن رکوردها بوسیله یک آرایه مجزا راه حل منطقی به نظر نمیاد!


    حالا تا این جای کار رو با هم متوجه شدیم بریم سراغ اصل چیزی که مورد نظرمون هست. ما می خوایم رکوردی که از picture_counter می گیریم یه این صورت باشه که اولویت با سطرهایی باشه که picture_id در اونا بیشتر تکرار شده باشن یعنی به این ترتیب :


    PHP:
    Columns:   | picture_id |
    ________________________
    Rows
    (1):   |      1     |
    Rows(2):   |      3     |
    Rows(3):   |      2     |
    ________________________
    همان طور که مشاهده میکنین picture_id =1 با 4 مرتبه تکرار در سطر اول picture_id =3 با سه مرتبه تکرار در سطر دوم و picture_id =2 با دو مرتبه تکرار در سطر سوم این رکورد گیری قرار میگیرند و اولویت با موارد هست که بیشترین تکرار رو داشتن!

    حالا شاید این سوال براتون پیش بیاد که چرا تیبل picture رو به صورت زیر طراحی نکنیم و با هر بار مشاهده تصاویر مقادیر مربوط یه هر تصویر در hit_counter مربوطه update بشه !

    PHP:
    Columns:   | picture_id picture_name hit_counter |
    _____________________________________________________
    Rows
    (1):   |      1     photo_one    |             |
    Rows(2):   |      2     photo_two    |             |
    Rows(3):   |      3     photo_three  |             |
    _____________________________________________________
    در جواب باید بگم مضیت چیزی که تو ذهن من هست اینه که این طوری میتونیم بفهمیم تصاویر پر بازدید ( در این مثال ) در هر روز یا کلی تر در هر ماه چه تصاویری هستن! این چیزیه که تو ذهن منه امید وارم منظورم، رو فهمیده باشید.

    در رابطه با مسئله ای که دوستان لطف کردن و در رابطه با اون صحبت شد، یه اشاره ی ( گسداخی ) کوتاه میکنم که از بحث اصلی منحرف نشیم.

    PHP:
    SELECT COUNT(fild_name) AS conter FROM table_name;
    استفاده از دستور زیر جنبه شمارنده برای فیلد های غیر خالی رو داره و برای چیزی که ما بش احتیاج داریم کار بردی نداره.
     
  22. setareh2

    setareh2 Registered User

    تاریخ عضویت:
    ‏24 ژانویه 2005
    نوشته ها:
    647
    تشکر شده:
    2
    محل سکونت:
    OC
    یه بار سوال رو با مثال عنوان میکنید
    من فکر کنم اون چیزی که ما فکر می کردیم فرق داره با منظور شما