Переустановка вопроса после внесения некоторых изменений, которые я удалил ранее. Я изо всех сил старался, но я не мог понять, как этого добиться.
У меня есть таблица fw_invitations
ID OFFICEID Consultationdate ------------------------------ 1 1 16-06-2013 2 1 16-06-2013 3 1 16-06-2013 4 1 17-08-2014 5 1 17-08-2014
$consultationdate
содержит дату, введенную пользователем.
$invcount="Select count(*) as noofinv, Datediff('$consultationdate',max(consultationdate)) as datediffinv from fw_invitations where OFFICEID = 1"; $db->setQuery($invcount); $invcounts=$db->loadAssoclist(); $noofinv=$invcounts[0]['noofinv']; $datediffinv=abs($invcounts[0]['datediffinv']); if($noofinv >3 && $datediffinv <150) { $error_message="Het maximale "; }
Я также пытаюсь это, но ниже запрос всегда приводит к 0
$invcount="Select count(*) as noofinv from fw_invitations where consultationdate between DATE_SUB($consultationdate,INTERVAL 150 DAY) and DATE_ADD($consultationdate,INTERVAL 150 DAY) from fw_invitations where OFFICEID = 1";
что я хочу сделать, так это то, что в таблицу должно быть вставлено не более 3 пользователей, если датифик составляет более 150 (5 месяцев).
Мой предыдущий запрос работал отлично, если я не ввел дату с большим интервалом. Поскольку я использую max(consultationdate)
поэтому максимальная дата для указанной выше таблицы будет 17-08-2014, она не будет проверять случай, когда пользователь снова вводит дату 16-06-2013.
Короче говоря, я хочу, чтобы в любом случае в базу данных в течение 5 месяцев добавлялось только 3 пользователя.
Это можно сделать так (псевдокод!):
function isAllowed($entry) { $before = SELECT all entries from past 5 months; $after = SELECT all entries from next 5 months; if(count($before) >= 3 || count($after) >= 3) { return false; } if(count($before) == 0 || count($after) == 0) { return true; } $all = array_merge($before, array($entry), $after); for($i = 0; $i < count($before); $i++) { if(isset($all[$i + 2])) { $first = $all[$i]; $last = $all[$i + 2]; if($last->date < $first->date + 5 months) { return false; } } } return true; }
я пропустил одинарные кавычки в $ consultingdate, потому что он получал 0 каждый раз, исправляя его работу как шарм.
$invcount="Select count(*) as noofinv from fw_invitations where consultationdate between DATE_SUB('$consultationdate',INTERVAL 150 DAY) and DATE_ADD('$consultationdate',INTERVAL 150 DAY) from fw_invitations where OFFICEID = 1";