Прямо сейчас у меня есть следующий запрос:
SELECT name, COUNT(name), time, price, ip, SUM(price)
FROM tablename
WHERE time >= $yesterday
AND time <$today GROUP BY name
И то, что я хотел бы сделать, добавляет ОТЛИЧНОЕ столбцом 'IP', т.е.
SELECT DISTINCT ip FROM tablename
Таким образом, мой окончательный результат был бы всеми столбцами от всех строк это, где время сегодня, сгруппировано по имени (со счетом имени для каждого имени повторения) и никакие дублирующиеся IP-адреса.
На что должен быть похожим мой запрос? (или альтернативно, как я могу добавить недостающий фильтр к выводу с php)?
Заранее спасибо.
[ОБНОВЛЕНИЕ]
Для уменьшения беспорядка рассмотрите эту (упрощенную) таблицу базы данных:
| name | ip |
---------------------
| mark | 123 |
| mark | 123 |
| mark | 456 |
| dave | 789 |
| dave | 087 |
Результатом, который я ищу, была бы HTML-таблица, бывшая похожая на это:
| name | name count |
----------------------------
| mark | 2 |
| dave | 2 |
То, что я в настоящее время получаю:
| name | name count |
----------------------------
| mark | 3 |
| dave | 2 |
(это считает метку 3 раза, даже при том, что два раза с тем же IP).
вы можете использовать COUNT (DISTINCT ip)
, это будет учитывать только отдельные значения
Каким-то образом ваше требование звучит немного противоречиво ..
группа по имени (которая в основном отличается по имени плюс готовность к агрегированию), а затем отдельная на IP
Как вы думаете, что должно произойти, если два человека (имена) работали с одного IP в течение указанного периода времени?
Вы пробовали это?
SELECT name, COUNT(name), time, price, ip, SUM(price)
FROM tablename
WHERE time >= $yesterday AND time <$today
GROUP BY name,ip
Замена FROM tablename
на FROM (ВЫБЕРИТЕ ОТЛИЧНОЕ * ОТ имени таблицы)
должна дать желаемый результат (игнорируя дубликаты строк), например:
SELECT name, COUNT(*)
FROM (SELECT DISTINCT * FROM Table1) AS T1
GROUP BY name
Результат для тестовых данных:
dave 2
mark 2
Вы можете просто добавить DISTINCT (ip)
, но он должен стоять в начале запроса. Обязательно экранируйте переменные PHP, которые входят в строку SQL.
SELECT DISTINCT(ip), name, COUNT(name) nameCnt,
time, price, SUM(price) priceSum
FROM tablename
WHERE time >= $yesterday AND time <$today
GROUP BY ip, name