Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Распределить дату для каждой записи за весь период
 
 автор: web777   (13.01.2016 в 00:37)   письмо автору
 
 

имеется примерно такая таблица с записями
id name date

записей около 10 тыс, нужно для каждой записи прописать дату, начиная с текущего времени и плюс 3 года в перёд, на каждый день по 3- 4 записи.

Допустим имеем сегодня дату 13-01-2016, нужно до 13-01-2019 для каждой записи прописать дату, так чтобы на каждый день было примерно по 4 записи

  Ответить  
 
 автор: elenaki   (13.01.2016 в 10:10)   письмо автору
 
   для: web777   (13.01.2016 в 00:37)
 

Это задача для PHP, а не для базы

  Ответить  
 
 автор: Valick   (13.01.2016 в 10:55)   письмо автору
 
   для: elenaki   (13.01.2016 в 10:10)
 

где-то 90% что я смогу это сделать на уровне СУРБД

  Ответить  
 
 автор: web777   (13.01.2016 в 17:24)   письмо автору
 
   для: 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 в 22:17)   письмо автору
 
   для: 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(515); // количество записей на каждую дату     
  
  // 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='".strtotimedate('d.m.Y H:i:s'strtotime($dates)) )."', status='0' WHERE id = '".$row['id']."' \n";
        
$db->q("UPDATE `" PREFIX "data` SET create_date='".strtotimedate('d.m.Y H:i:s'strtotime($dates)) )."', status='0' WHERE id = '".$row['id']."' ");
    }


  }
}
?>


в самом вверху определяем диапазон дат, от и до, далее перебираем все их, внутри которого делаем цикл рамдом разное кол-во записей на каждую дату, далее сохраняем в базу выбранные записи по статусу "status" и пересохраняем под другим значением статуса, и так до конца пока не закончатся записи со всеми значениями статуса, и также даты.

  Ответить  
 
 автор: confirm   (14.01.2016 в 13:57)   письмо автору
 
   для: 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

И остальное можно упростить.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования