У меня есть этот запрос
$mysqli->query("SELECT COUNT(*) from `login_log` where from_unixtime(`date`) >= DATE_SUB(NOW(), INTERVAL 1 WEEK);") or die($mysqli->error.__LINE__);
и тот же с 1 diff. это не 1 НЕДЕЛЯ , но 1 МЕСЯЦ, как я могу объединить эти два и назначить их для псевдонимов?
Я бы сделал это с условной агрегацией:
SELECT SUM(from_unixtime(`date`) >= DATE_SUB(NOW(), INTERVAL 1 WEEK)), SUM(from_unixtime(`date`) >= DATE_SUB(NOW(), INTERVAL 1 MONTH)) FROM `login_log`;
MySQL обрабатывает логические значения как целые числа, причем 1
имеет значение «true», а 0
– «false». Таким образом, используя sum()
вы можете подсчитать количество совпадающих значений. (В других базах данных вы делаете что-то подобное, используя case
.)
Несмотря на то, что довольно сложно понять, что вы спрашиваете:
Если вы хотите, чтобы они в одной колонке использовали OR
$mysqli->query("SELECT COUNT(*) from 'login_log' where from_unixtime('date') >= DATE_SUB(NOW(), INTERVAL 1 WEEK) OR from_unixtime('date') >= DATE_SUB(NOW(), INTERVAL 1 MONTH) ;") or die($mysqli->error.__LINE__);
Если вы не хотите дублировать ответы: используйте GROUP BY
Используйте условие where с одним месяцем внутри и добавьте то же самое, когда условие с одной недельной внутренней в качестве возврата булевского столбца.
Я имею в виду
Select count (*) all_in_month, (from_unixtime(`date`) >= DATE_SUB(NOW(), INTERVAL 1 WEEK)) as in_week from `login_log` where from_unixtime(`date`) >= DATE_SUB(NOW(), INTERVAL 1 a MONTH) GROUP BY in_week;
Ps не проверили, но afaik он должен работать