|
|
|
| имеется примерно такая таблица с записями
id name date
записей около 10 тыс, нужно для каждой записи прописать дату, начиная с текущего времени и плюс 3 года в перёд, на каждый день по 3- 4 записи.
Допустим имеем сегодня дату 13-01-2016, нужно до 13-01-2019 для каждой записи прописать дату, так чтобы на каждый день было примерно по 4 записи | |
|
|
|
|
|
|
|
для: web777
(13.01.2016 в 00:37)
| | Это задача для PHP, а не для базы | |
|
|
|
|
|
|
|
для: elenaki
(13.01.2016 в 10:10)
| | где-то 90% что я смогу это сделать на уровне СУРБД | |
|
|
|
|
|
|
|
для: Valick
(13.01.2016 в 10:55)
| | не могли бы помочь?
я что-то смог сделать но не до конца ещё, например вот код, правда тут на PHP
<?php
$start = strtotime('2016-02-25');
$end = strtotime('2016-12-02');
do {
$arr_dates[] = date('d.m.Y', $start);
$start += 24*60*60;
}
print_r($arr_dates);
?>
|
тут получаем массив всех дат, далее создаю массив всех записей но выбираю только ID
<?php
$sql_result = $db->q("SELECT * FROM `" . PREFIX . "data` ORDER BY id asc");
$arr_items = array();
while($row = $db->mysql_assoc($sql_result))
{
$arr_items[$row['id']] = $row['id'];
}?>
|
далее думаю два массива совместить, как-то через цикл чередуя примерно по пять записей на каждую дату но что-то не получается
<?php $iCountPerPage = '15'; // кол-во записей на страницу
$iCountPage=ceil(sizeof($arr_items)/$iCountPerPage); // кол-во страниц
?>
|
далее думаю как-то так
<?php $qery_sql[] = "SELECT * FROM `" . PREFIX . "data` ORDER BY id asc limit $sum2,$iCountPerPage"; ?>
|
но тут уже такая каша получается, сам запутался, вообщем мысль такая, составить массив запросов где будет отличаться limit $sum2,$iCountPerPage
например если по пять записей, то
<?php
"SELECT * FROM `" . PREFIX . "data` ORDER BY id asc limit 0,5"
"SELECT * FROM `" . PREFIX . "data` ORDER BY id asc limit 5,5"
"SELECT * FROM `" . PREFIX . "data` ORDER BY id asc limit 10,5"
"SELECT * FROM `" . PREFIX . "data` ORDER BY id asc limit 15,5"
"SELECT * FROM `" . PREFIX . "data` ORDER BY id asc limit 20,5"
"SELECT * FROM `" . PREFIX . "data` ORDER BY id asc limit 25,5"
...
?>
|
а далее перебирать массив дат, и для каждой даты присваивать по выше указанному запросу, передвигаясь вперед, и делать апдейт записи указывая дату
Но что-то думаю запутанно и сложно как-то | |
|
|
|
|
|
|
|
для: web777
(13.01.2016 в 17:24)
| | сделал то, что именно хотел сделать, не знаю может у кого и лучше бы получилось...
<?php
$start = strtotime('2016-01-01');
$end = strtotime('2018-01-01');
do {
$arr_dates[] = date('d.m.Y', $start);
$start += 24*60*60;
} while($start <= $end);
// $count_item_to_date = 9; // количество записей на каждую дату
foreach($arr_dates as $dates) {
$count_item_to_date = rand(5, 15); // количество записей на каждую дату
// echo $dates."\n";
$sql_result = $db->q("SELECT * FROM `" . PREFIX . "data` where status = '1' ORDER BY id asc limit $count_item_to_date");
$i = 0;
while ($i < $count_item_to_date)
{
$i = $i + 1;
$arr_items = array();
while($row = $db->mysql_assoc($sql_result))
{
echo "UPDATE `" . PREFIX . "data` SET create_date='".strtotime( date('d.m.Y H:i:s', strtotime($dates)) )."', status='0' WHERE id = '".$row['id']."' \n";
$db->q("UPDATE `" . PREFIX . "data` SET create_date='".strtotime( date('d.m.Y H:i:s', strtotime($dates)) )."', status='0' WHERE id = '".$row['id']."' ");
}
}
}
?>
|
в самом вверху определяем диапазон дат, от и до, далее перебираем все их, внутри которого делаем цикл рамдом разное кол-во записей на каждую дату, далее сохраняем в базу выбранные записи по статусу "status" и пересохраняем под другим значением статуса, и так до конца пока не закончатся записи со всеми значениями статуса, и также даты. | |
|
|
|
|
|
|
|
для: web777
(13.01.2016 в 22:17)
| | $start = strtotime('2016-01-01');
$end = strtotime('2018-01-01');
do {
$arr_dates[] = date('d.m.Y', $start);
$start += 24*60*60;
} while($start <= $end);
DatePeriod
И остальное можно упростить.
| |
|
|
|