0

列 id、title、date を持つ単純な mysql テーブルがあるとします。毎日複数の行を持つことができますが、毎日が行を持つわけではありません。たとえば、日付が 6 月 15 日の行が 5 行あり、日付が 6 月 14 日の行が 0 行あるとします。行がないため、6 月 14 日を除く過去 7 日間のすべての結果を取得するにはどうすればよいですか。したがって、現在の日付から 7 日を差し引くだけではありません。行がまったくない過去7日間のみを取得したい。

次に、日付ごとのグループのように、毎日を単一の結果として返したいのですが、タイムスタンプの年/月/日の部分によって、返されるのは7つの結果のみであり、各結果は配列のようなものです個々の行。

それが理にかなっていることを願っています。何か案は?

編集:次のようにできることに気づきました:

WHERE Date BETWEEN DATE_SUB( NOW(), INTERVAL DATEDIFF( NOW(), (SELECT Date FROM test GROUP BY Date LIMIT 7,1 ) ) DAY ) and NOW()

しかし、これにより SQL 構文エラーが発生します。私がやろうとしているのは、サブクエリと日付ごとにグループ化して、毎日 1 つの結果を取得し、オフセット 7 から始まる 1 つの結果を返し、それを実行しDATEDIFFDATE_SUBINTERVAL x DAYS

4

2 に答える 2

2

同じ日の結果を配列として取得することはできませんが、タイトルをカンマで区切って日付別にグループ化できます。

SELECT GROUP_CONCAT(title) AS titles, date 
FROM test 
WHERE date > DATE_SUB(CURDATE(), INTERVAL 7 DAY)
GROUP BY date;

次に、PHP で次のようにします。

foreach ($results as $row)
{
    echo $row['date'];
    foreach ($row['titles'] as $title)
    {
        echo $title;
    }
}
于 2013-06-16T00:10:42.277 に答える
0

それを考え出した:それは動作します!

WHERE Date BETWEEN DATE_SUB(NOW(), INTERVAL (DATEDIFF( NOW(), (SELECT Date FROM test GROUP BY Date ORDER BY Date DESC LIMIT 8,1 ) ) ) DAY) and NOW()

かっこが抜けていたので、サブクエリに ORDER BY と DESC を追加する必要がありました。

于 2013-06-17T02:31:47.103 に答える