MySQL запрос для выбора зарегистрированных пользователей с 4:00 до 6:00 следующего дня и с 6:00 до 16:00 снова - PullRequest
0 голосов
/ 31 мая 2018

Я разработал php scrpit, который автоматически создает списки пользователей Excel, каждый день в 4 часа дня и в 6 часов утра.
Проблема заключается в запросе на выборку, так как каждый список содержит старых зарегистрированных пользователей + новых зарегистрированных, которые выбираются автоматическив cron job.
мне нужно выбрать только пользователей, зарегистрированных с 4:00 до 6:00 следующего дня, и еще один выбор для пользователей, зарегистрированных с 6:00 до 16:00 того же дня.

было бы замечательно любое направление или совет.
спасибо.

<?php

$conn = new mysqli('localhost', 'user', 'pass');  
mysqli_select_db($conn, 'dbname');  

$setSql = "SELECT * FROM sys";
$setRec = mysqli_query($conn,$setSql);

$columnHeader ='';
$columnHeader = "UID"."\t"."Name"."\t"."Number"."\t";


$setData='';

while($rec = mysqli_fetch_row($setRec))  
{
  $rowData = '';
  foreach($rec as $value)       
  {
    $value = '"' . $value . '"' . "\t";
    $rowData .= $value;
  }
  $setData .= trim($rowData)."\n";
}

date_default_timezone_set('Europe/Tirane');

echo 'Current Server Time:' . date('m/d/Y H:i:s a') ;

$name='export_'.date('m-d-Y_hia').'.xls';
$xen=ucwords($columnHeader)."\n".$setData."\n";
echo $xen;
file_put_contents($name, $xen);

?>

приведенный выше код выполняется в задании cron ежедневно в 16:00 и 6:00.
как это должно работать:
Выполнение 6:00 -> выбрать всех пользователей, зарегистрированных с 4:00 предыдущего дня до 6:00 (при запуске сценария)
16:00 выполнение-> выбрать всех пользователей, зарегистрированных с 6:00 до 16:00 того же дня.

сценарий создает другой файл Excel с именем файла как дата + время создания датыи время, и сохраняет файл на сервере.все доступные файлы показаны на другой странице и доступны для загрузки пользователю.

как это работает на самом деле:
script1, выполненный в 16:00 -> выбрать всех пользователей, зарегистрированных до 16:00.выполняется в 6:00 следующего дня -> выбирает всех пользователей из script1 + новые регистрации, сделанные с 16:00 до 6:00 следующего дня.
script1 снова выполняется в 16:00 -> выбирает пользователей с 6:00 до 16:00, без выбора тех же пользователей из script2.

Я хочу, чтобы script2 отменил выбор или не выбирал тех же пользователей, которые будут возвращены script1, что означает, что в выходных данных script1 и script2 не будет одинаковых данных.

edit: возможно, мне нужно будет добавитьстолбец даты и времени в таблице для достижения этой цели?

edit2: более понятное объяснение:
'userX' регистрируется в 15:00, поэтому скрипт, выполненный в 16:00, вернет 'userX'.
'userY'регистрируется в 7 вечера, поэтому скрипт, выполненный в 6 утра, должен возвращать только 'userY', а не 'userX'.
регистр 'userZ' в 10:00, поэтому скрипт, выполненный в 4 вечера, будет возвращать только 'userZ'.

1 Ответ

0 голосов
/ 31 мая 2018

будет лучше, если вы сможете предоставить некоторые примеры данных и желаемый результат, но, насколько я понимаю из вашего вопроса, приведенный ниже код будет работать для вас

if(hour(current_timestamp)) =6
Then 
     select users 
     from table_name 
     where hour(datetime) between 6 and 15; 
elseif(hour(current_timestamp)) =16
Then  
     select users 
     from table_name 
     where hour(datetime) between 6 and 15; 
end if;
...