За последние 24 часа нас посетили 56867 программистов и 1750 роботов. Сейчас ищут 850 программистов ...

Group By выборка максимального значения

Тема в разделе "PHP для новичков", создана пользователем Cyrius, 29 авг 2017.

  1. Cyrius

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

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    Привет, есть таблица ,messages, в которой нужно сделать выборку так, чтобы все строки с одинаковым значением `user_from` были сгруппированы в одну с максимальным значением времени (т.е. самым поздним). Очевидно, запрос
    PHP:
    1. $select  = "SELECT `name_from`, `text` FROM `messages`  WHERE `user_to` = '$id'  GROUP BY `user_from`  ORDER BY `date`";
    не выдает нужного результата. Подскажите, как правильно реализовать задумку.
    Спасибо
    ___
    Он группирует, но строку выдает первую из группы
     
  2. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
  3. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    не первую, а в общем случае любую . .ибо порядок не определен
    Код (Text):
    1. SELECT `name_from`, `text`, MAX(date) AS max_date
    2. FROM `messages`  WHERE `user_to` = '$id'  GROUP BY `user_from`  ORDER BY `date`
    потому MAX() применим...
    гораздо интереснее случай, если вы захотите последнее сообщение из группы показать )))) но и там есть способ
     
  4. Cyrius

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

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    здесь нету того, что мне нужно. Ибо мне нужно получить ТЕКСТ сообщения у которого дата самая поздняя.
    --- Добавлено ---
    нет нет нет, это не то, щас я вам скину скриншот того, что пытаюсь исправить
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    Так и надо говорить... ЧТО конкретно вам нужно... если текст последний говорю же - финт ушами нужен
    Код (Text):
    1. SELECT `name_from`, `text`, MAX(date) AS max_date,
    2. SUBSTRING(MAX(CONCAT(date,text)),LENGTH(MAX(date))+1) as last_msg
    3. FROM `messages`  WHERE `user_to` = '$id'
    4. GROUP BY `user_from`  
     
    Cyrius нравится это.
  6. Cyrius

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

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    http://g.recordit.co/dTHjmSrOHq.gif
    --- Добавлено ---
    Спасибо огромное за решение, всё работает, буду разбирать