MySQL - как выбрать из этой таблицы и отсортировать по дате_добавления? - PullRequest
0 голосов
/ 12 июля 2011

У нас есть таблица в MySQL, где один из столбцов равен date_added.

Для каждого date_added может быть несколько записей.

Мне необходимо показать веб-страницу, на которой отображаются строки, отсортированные по дате по убыванию, но не более 10 за дату.

Пример вывода:

Jun 1
 item
 item
 item
 item
 item
 item
May 31
 item 
 item etc

Есть ли способ запустить запрос в MySQL, который будет получать результаты, подобные этому?

Ответы [ 5 ]

1 голос
/ 12 июля 2011
SELECT * FROM records WHERE date_added in (
    SELECT date_added FROM dates ORDER BY date_added DESC
    )

Насколько я знаю, вы не можете выбрать только 10 строк для каждой даты.Вам нужно будет применить это ограничение в бизнес-логике вашего приложения.

0 голосов
/ 12 июля 2011
SET @rank:=0;
select TTT.f1, TTT.value
from 
(select TT.f1, TT.value,TT.c, 
@rank:=@rank+1 as rnk,  
case when @rank>=TT.c then @rank:=0 end as dummy
from (
select T.f1, T.value, cnt.c
from t2 T, (select f1, count(*) as c from t2 group by f1) cnt
where cnt.f1 = T.f1
order by T.f1 asc, T.value desc) TT ) TTT
where TTT.rnk<=10

, где f1 - это поле 'date', а value - это поле 'item'

0 голосов
/ 12 июля 2011

Не уверен насчет производительности (возможно, не очень):

SELECT m.* 
FROM 
    myTable AS m
WHERE m.id IN
        ( SELECT ms.id
          FROM myTable AS ms
          WHERE ms.date_added = m.date_added
          ORDER BY ms.something ASC           --- whatever (ASC or DESC)
          LIMIT 10
        )
ORDER BY m.date_added
       , m.something  

Вы также можете попробовать это:

SELECT m1.*
FROM myTable AS m1
  JOIN myTable AS m2
    ON m2.date_added = m1.date_added
    AND m2.id <= m1.id                 --- this could also be: 
                                       ---    m2.someField <= m1.someField
GROUP BY m1.id
HAVING COUNT(*) <= 10
ORDER BY m.date_added

или вариант:

SELECT m1.*
FROM myTable AS m1
  LEFT JOIN myTable AS m2
    ON m2.date_added = m1.date_added
    AND m2.id < m1.id              
GROUP BY m1.id
HAVING COUNT(*) < 10
ORDER BY m.date_added
0 голосов
/ 12 июля 2011

Насколько я знаю, нельзя выполнить запрос.Единственным решением было бы вставить эту логику в код веб-страницы.

Убедитесь, что набор записей упорядочен по дате.

В PHP один из вариантов будет:

foreach ($rs as $row) 
{
    if ($tmp_date != $row->date_added) { $counter = 0; }

    if ($counter <= 10) {
         echo $row->yourinfo; //Whatever you want echoed from your recordset             
    }

    $counter++;
    $tmp_date = $row->date_added;
}
0 голосов
/ 12 июля 2011

Я не уверен, что точно понимаю, что вы ищете, но вы можете попробовать:

SELECT * FROM myTable GROUP BY date_added DESC LIMIT 0,10;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...