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

نام تاپیک: order by قبل از limit

  1. #1
    کاربر دائمی آواتار tabib_m
    تاریخ عضویت
    تیر 1384
    محل زندگی
    ایران - قم
    پست
    1,268

    order by قبل از limit

    با سلام
    چطوری میتونم موقع select کردن ، کاری کنم که قبل از این که دستور limit و یا group by انجام بشه ، order by انجام بشه!
    اگه ما یه جدول داشته باشیم با رکورد های زیر

    ID NAME
    ----------------
    1 Mohsen
    2 Ali
    3 Sadeq
    4 Bahram
    5 Naser

    در صورتی که دستور زیر رو بدیم:

    SELECT * FROM `TABLENAME` WHERE 1 ORDER BY `NAME` LIMIT 3

    نتیجه این میشه:

    2 Ali
    1 Mohsen
    3 Sadeq

    در صورتی که من نتیجه ی زیر رو میخوام:

    2 Ali
    4 Bahram
    1 Mohsen


    امیدوارم منظورم رو متوجه شده باشید

  2. #2
    WHERE 1 رو بردارید باید درست عمل کنه.

  3. #3
    کاربر دائمی آواتار tabib_m
    تاریخ عضویت
    تیر 1384
    محل زندگی
    ایران - قم
    پست
    1,268
    منظورم از where 1 این بود که یه شرطی هم داریم
    نمیتونم از شرطم صرف نظر کنم.

  4. #4
    با هر شرطی باشه درست کار میکنه. شرط رو بفرمایید شاید ایراد از شرط باشه.


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

  5. #5
    کاربر دائمی آواتار tabib_m
    تاریخ عضویت
    تیر 1384
    محل زندگی
    ایران - قم
    پست
    1,268
    آخه به where چه ربطی داره؟؟؟
    مشکل با limit و order by هستش
    میشه بیشتر توضیح بدید؟؟

  6. #6
    ربطی نداره. ببخشید.

  7. #7
    کاربر دائمی آواتار tabib_m
    تاریخ عضویت
    تیر 1384
    محل زندگی
    ایران - قم
    پست
    1,268
    ربطی نداره. ببخشید.
    ناراحت شدید از حرفم؟
    واقعا قصدی نداشتم
    معذرت میخوام
    اگه بیشتر توضیح بدید ممنون میشم.

  8. #8
    نه. تنها چیزی که به خاطرم رسید گفتم. چون تا بحال ندیدم لیمیت و اردر بای مشکل داشته باشند. عذر خواهی هم بخاطر این بود که در مورد چیزی که دقیق نمیدونستم اظهار نظر کردم.
    برقرار باشید.

  9. #9
    کاربر دائمی آواتار tabib_m
    تاریخ عضویت
    تیر 1384
    محل زندگی
    ایران - قم
    پست
    1,268
    ممنون به خاطر کمکی که کردید
    دوستان دیگه نمیتونن کمک کنن؟
    بابا چیزی که اینجا زیاده ، حرفه ای :)

  10. #10
    من تست کردم و چنین مشکلی ندارم!!!

  11. #11
    ایراد باید از جای دیگه باشه. اردر بای و لیمیت مشکلی ندارند.

  12. #12
    کاربر دائمی آواتار tabib_m
    تاریخ عضویت
    تیر 1384
    محل زندگی
    ایران - قم
    پست
    1,268
    ببخشید
    معذرت میخوام
    اشتباهی سوالم رو پرسیدم
    مشکل من با limit نیست ، فقط با group by هست.
    واقعا شرمنده
    مشکل اینجاس که اول عمل group by صورت میگیره ، و بعد عمل order by
    اگه منظورم رو متوجه نمیشید ، بگید مثال بزنم.

    باز هم معذرت میخوام به خاطر اشتباهی که کردم. :(

  13. #13
    خواهش می کنم:)

    شکل اینجاس که اول عمل group by صورت میگیره ، و بعد عمل order by
    اگه منظورم رو متوجه نمیشید ، بگید مثال بزنم.
    ولی این منطق درسته...

    اگه منظورم رو متوجه نمیشید ، بگید مثال بزنم.
    مثال بزن...

  14. #14
    کاربر دائمی آواتار tabib_m
    تاریخ عضویت
    تیر 1384
    محل زندگی
    ایران - قم
    پست
    1,268
    ولی این منطق درسته...
    من هم نمیگم غلطه ، میگم من برعکسش رو نیاز دارم. برای کار بالعکس باید چیکار کنم؟؟
    حالا مثال:
    فرض کنید که یک فیلد دیگه هم داریم ، به نام Birthday (روز تولد) :


    ID NAME Birthday
    ----------------------------
    1 Mohsen 1367
    2 Ali 1369
    3 Sadeq 1350
    4 Ali 1320
    5 Bahram 1370
    6 Naser 1349
    7 Mohsen 1365
    8 Naser 1353
    9 Ali 1368
    10 Sadeq 1347


    و من میخوام ، group by Name بکنم ، و order by Birthday
    در اینجا ، در صورتی که عمل group_by صورت بگیره ، نتیجه این میشه:


    ID NAME Birthday
    ----------------------------
    1 Mohsen 1367
    2 Ali 1369
    3 Sadeq 1350
    5 Bahram 1370
    6 Naser 1349


    و بعد که سورت میشه ، نتیجه این میشه:


    ID NAME Birthday
    ----------------------------
    2 Ali 1369
    5 Bahram 1370
    1 Mohsen 1367
    6 Naser 1349
    3 Sadeq 1350


    ولی من میخوام اول عمل سورت انجام بشه ، و بعد group by صورت بگیره ، یعنی:

    عمل order by :


    ID NAME Birthday
    ----------------------------
    4 Ali 1320
    10 Sadeq 1347
    3 Sadeq 1350
    6 Naser 1349
    8 Naser 1353
    7 Mohsen 1365
    1 Mohsen 1367
    9 Ali 1368
    2 Ali 1369
    5 Bahram 1370


    و سپس عمل group by :


    ID NAME Birthday
    ----------------------------
    4 Ali 1320
    10 Sadeq 1347
    6 Naser 1349
    7 Mohsen 1365
    9 Ali 1368
    5 Bahram 1370


    حالا اگر نتایج رو مقایسه کنید میبینید که با هم فرق دارن!
    و من نیاز به این دارم که به نتیجه ی دوم برسم
    باید چه کار کنم؟

    پیشاپیش از کمکهاتون ممنون

    نتیجه ی دیگه ای که بهش رسیدم اینه که در مورد limit ابتدا عمل order by صورت میگیره ، و بعد عمل limit صورت میگیره، و علت گیج شدن بنده هم همین بود ، چون این مسئله هم به صورد دیگه حال منو گرفته. لطفا راهنمایی کنید.

    پ.ن: میدونم فکر میکنید که "حالا این یارو چه سوالایی میکنه" :) ولی بی خیال ، نیازمندم ، لطفا کمکم کنید.
    آخرین ویرایش به وسیله tabib_m : شنبه 11 شهریور 1385 در 17:22 عصر

  15. #15
    با یه ساب کوئری ممکنه مشکل حل بشه. از سایت mysql.com:


    If you want to use ORDER BY before GROUP BY, the only way I've found to achieve it is with a subquery.

    For example, if you want to get a list of users from a table UserActions sorted according to the most recent action (based on a field called Time) the query would be:

    SELECT * FROM (SELECT * FROM UserActions ORDER BY Time DESC) AS Actions GROUP BY UserID ORDER BY Time DESC;

    Without the subquery, the group is performed first, and so the first record that appears in the database (which is not necessarily in the order you want) will be used to determine the sort order. This caused me huge problems as my data was in a jumbled order within the table.

    --Edit--
    This same result can be achieved with the use of MAX(Time), so the query would be:

    SELECT *, MAX(Time) AS LatestAction GROUP BY UserID ORDER BY LatestAction DESC;

    As far as I can see, the subquery model still holds up if you need more complex sorting before performing the GROUP.


    باید برای کوئری خودتون اصلاحش کنید.

  16. #16
    کاربر دائمی آواتار tabib_m
    تاریخ عضویت
    تیر 1384
    محل زندگی
    ایران - قم
    پست
    1,268
    سلام
    بسیار ممنون از کمکتون
    میدونم راهی که معرفی کردید درسته
    ولی یه مشکلی دارم
    کوئری ای که من میدم اینه :

    SELECT * FROM (select * from `test` where 1 order by `Birthday`) as test group by `Name`

    بر اساس اون مثالی که زده ، باید درست باشه! ولی نتیجه ی نهایی یه ریزه عجیبه
    نگاه کنید ، کاری که این دستور کرده اینه که اول اومده رکوردها رو برعکس چیده ، اون ها رو گروپ کرده و بعد بر اساس نام سورت کرده!!!!

  17. #17
    فکر کنم جواب یکه نوشتی می خوای بهش برسی سطر یکی مونده به آخرش اضافیه.درسته؟

    حالا من با یه کوئری اینو در آوردم.
    ببین همینو می خوای؟

    SELECT name, min( birthday ) AS temp1
    FROM `tabib`
    GROUP BY name
    ORDER BY temp1



    جواب:

    name temp1
    ali 1320
    sadeq 1347
    naser 1349
    mohsen 1365
    bahram 1370


  18. #18
    کاربر دائمی آواتار tabib_m
    تاریخ عضویت
    تیر 1384
    محل زندگی
    ایران - قم
    پست
    1,268
    :) ممنون
    دقیقا همین رو میخواستم :)

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

  1. دستور من خطای limit of 256 tables را می دهد.
    نوشته شده توسط SYNDROME در بخش SQL Server
    پاسخ: 2
    آخرین پست: سه شنبه 16 بهمن 1386, 17:23 عصر
  2. query limit MsSql
    نوشته شده توسط delphi77 در بخش SQL Server
    پاسخ: 11
    آخرین پست: دوشنبه 15 فروردین 1384, 22:48 عصر
  3. query limit MsSql
    نوشته شده توسط delphi77 در بخش PHP
    پاسخ: 1
    آخرین پست: چهارشنبه 12 اسفند 1383, 19:18 عصر
  4. Picture Box control (Limit)x
    نوشته شده توسط Farhad.B.S در بخش VB.NET
    پاسخ: 2
    آخرین پست: پنج شنبه 11 اردیبهشت 1382, 12:18 عصر

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

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