За последние 24 часа нас посетили 18069 программистов и 1644 робота. Сейчас ищут 1864 программиста ...

Правильная выборка в mysql

Тема в разделе "MySQL", создана пользователем vlad99, 14 авг 2008.

  1. vlad99

    vlad99 Активный пользователь

    С нами с:
    14 авг 2008
    Сообщения:
    5
    Симпатии:
    0
    заранее извиняюсь если проблема банальная, но погуглил и не нашёл никакого решения

    Дано: таблица Comments с комментариями и временем их добавления

    Комментарий | Время добавления
    (comment) (date)
    ---------------------------
    comment1 | 02:26:55
    comment2 | 02:27:25
    comment3 | 02:27:30
    comment4 | 02:27:38
    comment5 | 02:27:54
    comment6 | 02:28:16
    comment7 | 02:28:20
    comment8 | 02:28:23
    comment9 | 02:28:27
    commen10 | 02:28:30
    commen11 | 02:28:33
    commen12 | 02:28:36
    commen13 | 02:28:40

    Мне необходимо выбрать первые 5 комментариев, не проблема:
    SELECT * from comments ORDER BY date asc LIMIT 0,5
    получаю результат:

    comment1
    comment2
    comment3
    comment4
    comment5

    А как сделать так чтобы результаты показывались в обратном порядке ?
    comment5
    comment4
    comment3
    comment2
    comment1
     
  2. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Завести comment_id и что-то типа [sql]ORDER BY date ASC, comment_id DESC[/sql]
    или просто выводить в обратном порядке
     
  3. vlad99

    vlad99 Активный пользователь

    С нами с:
    14 авг 2008
    Сообщения:
    5
    Симпатии:
    0
    спасибо, но так не работает
    про вывод в обратном порядке знаю, но хочется средствами mysql это делать
     
  4. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    ORDER BY date DESC LIMIT 0,5 ?
     
  5. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Koc, ну и какой результат будет по твоему?
     
  6. Vitas

    Vitas Активный пользователь

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    Может:
    [sql]SELECT * FROM comments WHERE comment_id IN (SELECT comment_id FROM comments ORDER BY comment_id ASC LIMIT 5) ORDER BY comment_id DESC[/sql]
    Сам не пробовал, но может заработает. :-Р

    upd: это не работает, вариант ниже — рабочий.
     
  7. Vitas

    Vitas Активный пользователь

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    Или:
    [sql]SELECT * FROM (SELECT * FROM comments ORDER BY id ASC) AS temp ORDER BY id DESC[/sql]
     
  8. Vitas

    Vitas Активный пользователь

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    А можно ещё:
    PHP:
    1. <?
    2.  
    3. $res = mysql_query("SELECT @num := COUNT(*) FROM comments");
    4. $num = mysql_result($res, 0);
    5.  
    6. $res = mysql_query("SELECT * FROM comments ORDER BY id DESC LIMIT " . ($num - 5) . ", 5");
     
  9. Vitas

    Vitas Активный пользователь

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    [sql]SELECT @id := id FROM comments ORDER BY id ASC LIMIT 4, 1[/sql]
    [sql]SELECT * FROM comments WHERE id <= @id ORDER BY id DESC[/sql]
    Во.
     
  10. Vitas

    Vitas Активный пользователь

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    Кароче я идиот, меня не спрашивайте.

    upd: ЧОЧО!1 Пыщь!!1
     
  11. vlad99

    vlad99 Активный пользователь

    С нами с:
    14 авг 2008
    Сообщения:
    5
    Симпатии:
    0
    спасибо Vitas, работает :)
     
  12. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    Sergey89
    потому что дату нужно хранить в таймстампе, а не 22:33:44 ИМХО
     
  13. Vitas

    Vitas Активный пользователь

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    Koc, ты про что? :)
     
  14. Vitas

    Vitas Активный пользователь

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    А вообще в базе данных можно хоть timestamp, хоть datetime использовать разницы никакой. Только при использовании datetime дамп базы становится более читабельным и при выборке придется использовать UNIX_TIMESTAMP().
    Да и вообще, можно просто настроить локаль на MySQL, чтобы она выдавала даты по-русски и красиво.