Здравствуйте, Подскажите как это можно решить Есть таблица name_table Код (Text): +----------+----------------+-------------+---------------------+ ID | valroot | text | date | +----------+----------------+-------------+---------------------+ 1 | 5825 | Claws | 1994-03-17 15:15:19 | 2 | 5825 | Slims | 1996-04-29 15:15:19 | 3 | 1912 | Whistler | 1997-12-09 15:15:19 | 4 | 1912 | Wtlerrew | 1997-11-09 15:15:19 | 5 | 5825 | Cloms | 1998-09-11 15:15:19 | 6 | 9511 | Puffball | 1999-03-30 15:15:19 | +----------+----------------+-------------+---------------------+ Как вывести значение text в ветке valroot самое последние по дате после чего саму ветку отсортировать по ASC вывод должен работать следующим образом ... Код (Text): +----------+----------------+-------------+---------------------+ ID | valroot | text | date | +----------+----------------+-------------+---------------------+ 6 | 9511 | Puffball | 1999-03-30 15:15:19 | 3 | 1912 | Whistler | 1997-12-09 15:15:19 | 5 | 5825 | Cloms | 1998-09-11 15:15:19 | +----------+----------------+-------------+---------------------+
для начала надо хранить время в timestamp (метка UNIX). А не в том формате, котором Вы храните. Добавлено спустя 1 минуту 16 секунд: метка UNIX - время в секундах или микросекундах от 1 января 1997 г. до сегодняшнего момента. Тобишь чем больше метка, тем позднее дата.
Да, все верно дата имеет формат YYYY-mm-dd HH:ii:ss ... забыл здесь упомянуть. Отсортировать всю таблицу проблем не составляет Код (Text): SELECT * FROM name_table ORDER BY date DESC Пока не знаю, как реализовать вывод который я упоминал выше...
да ни как. Вот как я сказал так и делаете. Метка должна в базе храниться. Какая разница, так и так вы при выводе можете ее преобразовать. В чем проблема?
Вы меня извините но, как понимать "Метка должна в базе храниться"? Это дополнительная колонка в таблице? Есть ли хоть какие-то примеры? Везде искал ничего не нашел ...
вот так и прямо понимать. Вы преобразуете свое время записывая его БД date("формат", time()). А это делать не надо. Оставляем только красное и будет Вам метка. А когда будите выводить ее из базы, то делаете так: date("формат", $sql['date']) Где переменная $sql['date'] - это результат. Сортируете так же по метке в обратном порядке (ORDER BY date DESC) Добавлено спустя 52 секунды: Включаем логику.
По дате вывод должен работать следующим образом ... Код (Text): +----------+----------------+-------------+---------------------+ ID | valroot | text | date | +----------+----------------+-------------+---------------------+ 6 | 9511 | Puffball | 1999-03-30 15:15:19 | 3 | 1912 | Whistler | 1997-12-09 15:15:19 | 5 | 5825 | Cloms | 1998-09-11 15:15:19 | +----------+----------------+-------------+---------------------+
Да, то что нужно. Только еще нужно как-то отсортировать по дате после GROUP BY `valroot` и выводить последние значение text. То-есть после GROUP BY `valroot`в середине групы отсортировать по дате и выводить значение text. Сейчас выводится Код (Text): +----------+----------------+-------------+---------------------+ ID | valroot | text | date | +----------+----------------+-------------+---------------------+ 1 | 5825 | Claws | 1994-03-17 15:15:19 | +----------+----------------+-------------+---------------------+ а нужно Код (Text): +----------+----------------+-------------+---------------------+ ID | valroot | text | date | +----------+----------------+-------------+---------------------+ 5 | 5825 | Cloms | 1998-09-11 15:15:19 | +----------+----------------+-------------+---------------------+
попробуй SELECT * FROM `name_table` ORDER BY `date` DESC, `id` DESC GROUP BY `valroot` только хз насколько это хорошо так делать =)
зачем в текстовом выводить епта? Сортируете по дате (в метке дата). А когда выводите, выводите date, но преобразуете его в читаемый (текстовый) вид.
да не о том речь. оно хранится в правильном виде, выводится в текстовом, это сам мускул так делает. просто местами перепутал. попробуй так SELECT * FROM `table_name` GROUP BY `valroot` ORDER BY `date` DESC , `id` DESC
С чего ты взяли что это бред, и какая еще может быть несостыковыка? Напиши запрос который будет нормально работать как ты думаешь... Код (Text): SELECT * FROM name_table t JOIN ( SELECT valroot, MAX(date) Maxdatetime FROM name_table GROUP BY valroot ) r ON t.valroot = r.valroot AND t.date = r.Maxdatetime ORDER BY t.date desc
Что мы имеем: +----------+----------------+-------------+---------------------+ ID | valroot | text | date | +----------+----------------+-------------+---------------------+ 5 | 5825 | Cloms | 98546587895 | +----------+----------------+-------------+---------------------+ Время сохраняем в метке Делаем следующий запрос Код (Text): SELECT * FROM name_table ORDER BY date DESC Объясняю: UNIX_TIMESTAMP (метка времени) - Это кол-во секунд от 1 января 1970 года. Получается чем позднее дата, тем больше секунд. Улавливаешь? Поэтому я в своем запросе сортирую по дате (метке - число) в обратном поряке. Просто когда ты заносишь в базу данные, заноси не уже готовую дату как ты делаешь (date("формат", time())), а просто time(). А вот когда ты уже выводишь свои полученные данные, то делай уже так: date("формат", $row['date']) Розовым - это полученный результат. В нашем случае это 98546587895 - мы ее преобразуем в читаемую дату
Как я уже ранее писал мне удалось сделать Код (Text): SELECT * FROM name_table t JOIN ( SELECT valroot, MAX(date) Maxdatetime FROM name_table GROUP BY valroot ) r ON t.valroot = r.valroot AND t.date = r.Maxdatetime ORDER BY t.date desc Но нужно добавить в строку запроса еще одну таблицу с выражением, делаю следующее Код (Text): SELECT * FROM name_table t, else_name_table g JOIN ( SELECT valroot, MAX(date) Maxdatetime FROM name_table GROUP BY valroot ) r ON t.valroot = r.valroot AND t.date = r.Maxdatetime ORDER BY t.date desc Не работает ! Помогите !