Вывод с счётчиком и фильтром Mysqli

252
18 мая 2017, 13:03

Помогите вывести правильно, если убрать COUNT(ip) AS total, то всё работает отлично, но без счётчика очень печально!

 SELECT id, ip, COUNT(ip) AS total, pc, country, date 
    FROM user t
    WHERE id = (
        SELECT max(id)
        FROM user
        WHERE t.ip = ip
    );

Изначально я использовал такую систему SELECT id, ip, COUNT(ip) AS total, pc, country, date FROM user GROUP BY ip DESC, но после, захотел добавить ещё, чтобы каждая выведенная строка была последняя по id либо по дате, а не старая изначально.

Answer 1

вы почти всё правильно сделали. но

  1. во вложенном запросе вам надо получить не один (максимальный) id, а несколько — по одному для каждого ip. это делается как раз директивой group by — её надо применить ко вложенному запросу, а не к внешнему. см. первый запрос в примере.

  2. для подсчёта количества строк во всей таблице, соответствующих ip из получившегося набора, нужен ещё один, отдельный sql-запрос. его можно вставить прямо в список получаемых полей (заключив в скобки). см. второй запрос в примере.

вот поясняющий пример:

SQL Fiddle

MySQL 5.6 Schema Setup:

create table t (id int, ip text, d date);
insert into t (id, ip, d) values
   (1, "1", "2017-05-16")
  ,(2, "2", "2017-05-17")
  ,(3, "1", "2017-05-01")
  ,(4, "2", "2017-05-02")
  ,(5, "1", "2017-05-05")
  ,(6, "1", "2017-05-10")
  ,(7, "2", "2017-05-11")
;

Query 1:

select t1.id, t1.ip, t1.d
from t as t1
where 
  t1.id in (
   select max(t3.id) from t as t3
   group by t3.ip
  )

Results:

| id | ip |                     d |
|----|----|-----------------------|
|  6 |  1 | May, 10 2017 00:00:00 |
|  7 |  2 | May, 11 2017 00:00:00 |

Query 2:

select t1.id, t1.ip, t1.d, 
  (select count(1) from t as t2 where t2.ip = t1.ip) as total 
from t as t1
where 
  t1.id in (
   select max(t3.id) from t as t3
   group by t3.ip
  )

Results:

| id | ip |                     d | total |
|----|----|-----------------------|-------|
|  6 |  1 | May, 10 2017 00:00:00 |     4 |
|  7 |  2 | May, 11 2017 00:00:00 |     3 |
READ ALSO
Обработка массива php mysql

Обработка массива php mysql

Нужно вывести сгруппировав по bid_number:

278
Замена значения по словарю при SELECT

Замена значения по словарю при SELECT

Пытался гуглить, но так и не смог ничего найти

237
Как передать массив во view

Как передать массив во view

У меня возникает ошибка Undefined variable: usersЯ заранее извиняюсь, вопрос конечно элементарный

159