Mysql, Сделать выборку пронумерованными строками по дням
Надо получить список новостей с нумерацией от начала дня. Представим есть таблица новостей
+----+-------------+--------------------+
| id |title | date |
+----+-------------+--------------------+
| 1 |Lorem..... |2012-12-16 16:29:56 |
| 2 |Lorem..... |2013-02-25 14:59:37 |
| 4 |Lorem..... |2013-02-25 15:12:44 |
| 5 |Lorem..... |2013-02-25 15:14:18 |
| 6 |Lorem..... |2013-02-25 15:14:18 |
| 7 |Lorem..... |2013-02-26 11:31:31 |
| 8 |Lorem..... |2013-02-26 11:31:59 |
| 10 |Lorem..... |2013-02-26 11:34:47 |
| 11 |Lorem..... |2013-03-17 11:35:12 |
| 14 |Lorem..... |2013-03-04 04:39:02 |
| 15 |Lorem..... |2013-03-04 05:44:44 |
| 16 |Lorem..... |2013-03-04 05:48:29 |
| 19 |Lorem..... |2013-03-07 15:22:34 |
| 20 |Lorem..... |2013-03-15 12:24:43 |
| 21 |Lorem..... |2013-03-16 16:27:43 |
| 22 |Lorem..... |2013-03-16 16:29:28 |
| 23 |Lorem..... |2013-03-16 16:29:56 |
| 24 |Lorem..... |2013-03-16 17:29:56 |
| 25 |Lorem..... |2013-03-16 18:29:56 |
| 26 |Lorem..... |2013-03-16 20:29:56 |
| 27 |Lorem..... |2013-03-16 21:29:56 |
+----+-------------+--------------------+
надо получить 2 новости с сортировкой по убыванию и со смещением 3
SELECT * FROM `news` ORDER BY id DESC LIMIT 3, 2
а вывод должен быть
+----+-------------+--------------------+-------------+
| id |title | date |row_number |
+----+-------------+--------------------+-------------+
| 24 |Lorem..... |2013-03-16 17:29:56 | 4 |
| 23 |Lorem..... |2013-03-16 16:29:56 | 3 |
+----+-------------+--------------------+-------------+
возможно ли построить такой запрос в MYSQL?
Ответы (1 шт):
Автор решения: Alisher-Ergashev
→ Ссылка
Итого сделал такой запрос, может кому пригодится.
SET @pos := 0;
SET @report_date := '';
SELECT n.id, n.title, n.author, date_format(n.date, '%H:%i %d.%m') as date, temp.pos
FROM posts n
LEFT JOIN (SELECT @pos := if(DATE(@report_date) <> DATE(date_format(posts.date, '%d.%m.%Y')), 1, @pos +1) AS pos, posts.id, @report_date := date_format(posts.date, '%d.%m.%Y') as date, posts.date as date2
FROM posts
WHERE DATE(date) BETWEEN CURRENT_DATE() - 7 AND CURRENT_DATE()
ORDER BY `date2` ASC) temp
ON n.id=temp.id
ORDER BY n.id DESC
LIMIT 30;