У меня есть таблица, которая хранит клиентов, как это:Как подсчитать количество записей в MySQL и объединить результаты в PHP
id name
-- ----
1 John
2 Jane
...
У меня также есть другая таблица, которая хранит ссылки, созданные клиентами:
id client_id link created
-- --------- ---- -----------
1 1 ... 2015-02-01
2 1 ... 2015-02-26
3 1 ... 2015-03-01
4 2 ... 2015-03-01
5 2 ... 2015-03-02
6 2 ... 2015-03-02
Мне нужно найти, сколько ссылок создано клиентом сегодня, в этом месяце и в течение всего времени. Я также нуждаюсь в их имени в результате, поэтому я смогу уклониться от таблицы HTML для отображения статистики. Я думал, что я могу закодировать как можно меньше, как это:
$today = $this->db->query("SELECT COUNT(*) as today, c.id as client_id, c.name FROM `links` l JOIN `clients` c ON l.client_id = c.id WHERE DATE(l.created) = CURDATE() GROUP BY c.id");
$this_month = $this->db->query("SELECT COUNT(*) as this_month, c.id as client_id, c.name FROM `links` l JOIN `clients` c ON l.client_id = c.id WHERE YEAR(l.created) = YEAR(NOW()) AND MONTH(l.created) = MONTH(NOW()) GROUP BY c.id");
$yet = $this->db->query("SELECT COUNT(*) as yet, c.id as client_id, c.name FROM `links` l JOIN `clients` c ON l.client_id = c.id WHERE GROUP BY c.id");
, а затем объединить их в PHP, как я просил HERE перед тем, как это:
$result = array_replace_recursive($today, $this_month, $yet);
Так что я буду иметь возможность цикла в результат и напечатать мою таблицу HTML.
Но здесь есть логические проблемы. Все работает нормально, но результат в месяц - это неправильный номер, например, все созданные ссылки одного человека равны 1, но он показывает 4 в ежемесячном счетчике! Я также попытался использовать RIGHT JOIN в SQL-запросе, чтобы получить все клиенты, поэтому array_replace_recursive в PHP может работать нормально, поскольку я думаю, что он не работает должным образом на данный момент, но не имеет успеха и снова получил неправильные результаты.
Может ли кто-нибудь показать мне способ сделать работу?
Просто на будущее, вы должны добавить SQLFiddle всякий раз, когда это возможно для материала базы данных. На самом деле экономит время людей и быстрее дает вам ответ. – Jhecht