MySQLで日付の連番レコードを作る
テスト時のデータ投入とかで便利なのでメモ
例えばこういうデータがほしい時
2015-10-01 2015-10-02 2015-10-03 ・・・ 2015-10-31
SET @from_date = DATE_ADD('2015-10-01', INTERVAL -1 DAY); SET @to_date = '2015-10-31'; SELECT @from_date:=DATE_ADD(@from_date, INTERVAL 1 DAY) FROM mysql.time_zone WHERE @from_date < @to_date;
mysql.time_zoneはどのテーブルでも構わないのですがレコード数がある程度ないとその分作られないので注意。 変数は別に使わなくてもいいのですが変数にしておけばリサイクルしやすいです。
CROSS JOINしてユーザーごとの日付を作るとかもできますよね。
SET @from_date = DATE_ADD('2015-10-01', INTERVAL -1 DAY); SET @to_date = '2015-10-31'; SELECT * FROM (SELECT DISTINCT user FROM mysql.user WHERE user != '' ) AS target_user, (SELECT @from_date:=DATE_ADD(@from_date, INTERVAL 1 DAY) FROM mysql.time_zone WHERE @from_date < @to_date ) AS target_date;