ФорумРазработкаБазы данных → GROUP BY с последней датой

GROUP BY с последней датой

  • technobulka

    Сообщения: 4540 Репутация: N Группа: Джедаи

    Spritz 25 июля 2010 г. 6:27

    ORDER BY date DESC

    вроде так…
    Высокоуровневое абстрактное говно
  • Freakmeister

    Сообщения: 9 Репутация: N Группа: Кто попало

    Spritz 25 июля 2010 г. 7:35, спустя 1 час 7 минут 58 секунд

    DESC отвечает за конечный вывод, к ORDER BY оно не аттачится. Тоесть, если без DESC у меня выдаёт: "Dr. Manhattan, Batman, FLASH", то с DESC выдаст просто обратный порядок: FLASH, Batman, Dr. Manhattan.
  • technobulka

    Сообщения: 4540 Репутация: N Группа: Джедаи

    Spritz 25 июля 2010 г. 8:33, спустя 57 минут 52 секунды

    ну хз, у меня почему-то все нормально…

    SELECT * FROM posts GROUP BY title ORDER BY created DESC"

    сортирует по дате и последние вверху, не смотря на "GROUP BY title"
    Спустя 66 сек.
    эт я на примере своей таблицы… мб у тебя какая-то волшебная_))_
    Высокоуровневое абстрактное говно
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 25 июля 2010 г. 8:54, спустя 20 минут 52 секунды

    Freakmeister, ты просто не совсем корректно понял к чему применяется DESC и ASC. На самом деле это не сама сортировка, её тип. А следовательно, нужно указать к чему именно этот тип привязать. В твоем случае это дата.
    Ну и за вывод никакая часть запроса не отвечает. Она отвечает лишь только за получение нужных данных в нужной форме/порядке из базы, остальное уже не её дело.
  • Freakmeister

    Сообщения: 9 Репутация: N Группа: Кто попало

    Spritz 25 июля 2010 г. 9:18, спустя 24 минуты 39 секунд

    Ок, а конкретика есть какая-то?)
    $DB->query( "SELECT * FROM mkp_stats GROUP BY name ORDER BY date DESC"); - меняет порядок ORDER BY, а не GROUP BY.
    $DB->query( "SELECT * FROM mkp_stats GROUP BY name DESC ORDER BY date"); - не работает.
  • technobulka

    Сообщения: 4540 Репутация: N Группа: Джедаи

    Spritz 25 июля 2010 г. 9:28, спустя 10 минут 8 секунд

    я вааще mysql позвала по пхпмайадмину)) там вроде DESC и ASC на ORDER BY вешаются))
    или я совсем дурак и нифига не шарю))
    Спустя 166 сек.
    хотя GROUP BY bla DESC пашет))
    Спустя 85 сек.
    и даже такое пашет))

    SELECT *
    FROM `posts`
    GROUP BY `bodytext` DESC
    ORDER BY `created` DESC


    но приоритет на последнее))
    Спустя 96 сек.
    меняет порядок ORDER BY, а не GROUP BY.

    на[рена тебе менять порядок GROUP если ты хочешь по дате?! оО
    Высокоуровневое абстрактное говно
  • Freakmeister

    Сообщения: 9 Репутация: N Группа: Кто попало

    Spritz 25 июля 2010 г. 9:43, спустя 14 минут 28 секунд

    Ну не работает оно в моём коде, что ж мне, застрелиться теперь?) Подкинули вот мануал, сейчас буду курить: http://jan.kneschke.de/projects/mysql/groupwise-max/
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 25 июля 2010 г. 9:58, спустя 15 минут 22 секунды

    заюзай MAX() для нужного поля даты
    adw/0
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 25 июля 2010 г. 10:05, спустя 6 минут 35 секунд

    Freakmeister, сделай двойную сортировку - сначала по дате, потом по имени. Получится так: …ORDER BY date DESC, name;
  • Freakmeister

    Сообщения: 9 Репутация: N Группа: Кто попало

    Spritz 25 июля 2010 г. 12:18, спустя 2 часа 13 минут 32 секунды

    Один добрый дядя подсказал синтаксис:
    $DB->query( "SELECT *, ($form_score) AS score FROM mkp_stats s1 WHERE NOT EXISTS
    (SELECT * FROM mkp_stats s2 WHERE s1.ide = s2.ide AND s1.date < s2.date) ORDER BY $order");

    Всё работает, сейчас вы можете наблюдать это на странице.

    Но у меня тут появилась более сумасшедшая идея. Пока не могу придумать как её реализовать, и вообще не уверен, что это можно сделать через SELECT одним запросом. Буду признателен за совет или идею.
    Собственно, в таблице есть графа kills, я хочу чтобы в ней писалось не только кол-во убийств, а в скобках ещё сколько игрок наверстал с прошлого обновления статистики. Например, в таком виде: Убийства: 141234 (+117).
    По идеи, тут надо вытаскивать последнюю запись, потом предпоследнюю запись и вычитать из последней предпоследнюю. Пока не могу даже себе представить как вытащить предпоследнюю запись… внутри цикла while( $row = $DB->fetch_row($query) ) { делать ещё одно обращение к бд нельзя?
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 25 июля 2010 г. 12:31, спустя 12 минут 25 секунд

    Вытащить 2 крайние записи и вычесть одну из другой никак?
    adw/0
  • Freakmeister

    Сообщения: 9 Репутация: N Группа: Кто попало

    Spritz 25 июля 2010 г. 13:10, спустя 39 минут 15 секунд

    Наверно можно как-то. Меня интересует как.)
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 25 июля 2010 г. 13:15, спустя 4 минуты 36 секунд

    select field from table order by field2 desc limit 2
    а в php $row[0]['field'] - $row[1]['field'], вот о чем я
    adw/0
  • Freakmeister

    Сообщения: 9 Репутация: N Группа: Кто попало

    Spritz 26 июля 2010 г. 0:33, спустя 11 часов 17 минут 58 секунд

    К запросу выше desc limit 2 прицепить не получится, потому что он просто выдаст 2 записи по разным никам и остановится на этом. Тут похоже надо делать второй запрос и очень не хотелось бы запихивать его в массив на 150 записей. Если сделать второе обращение к бд прямо внутри цикла первого обращения, то такая структура будет работать?
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 26 июля 2010 г. 4:50, спустя 4 часа 17 минут 45 секунд

    тогда джоин и группировка по никнейму, в обоих случаях делать max() а во втором еще указать что не должно совпадать с первым
    adw/0

Пожалуйста, авторизуйтесь, чтобы написать комментарий!