Помогите с SQL запросом

12
mff
На сайте с 21.02.2008
Offline
282
mff
708

Есть табличка:

id 	ip 	id_channel 	time 

1 70.88.31.247 613 1261099440
2 95.70.82.140 1016 1261099633
3 95.01.82.140 1016 1261099645
4 67.190.111.224 1388 1261099674
5 77.88.31.247 1315 1261099850
6 67.190.111.224 1502 1261099937
7 77.88.31.247 1715 1261099951
8 95.135.36.200 561 1261099988
9 77.88.30.247 1099 1261099995
10 90.71.02.140 1016 1261100724
11 95.71.82.140 1016 1261100731

Нужно выбрать из нее тот id_channel, который больше всего повторяется.

В нашем случае это 1016

Далее уже посчитать сколько раз повторяется.

Спасибо!

Управление репутацией в сети: https://timbook2.ru/
B
На сайте с 23.10.2006
Offline
170
#1
mff:

Нужно выбрать из нее тот id_channel, который больше всего повторяется.

В нашем случае это 1016
Далее уже посчитать сколько раз повторяется.

Спасибо!

чет тип такого


$query = "SELECT ...........
$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result)) {
$id_channel[$row["id_channel"]]++;
}

сортируем по значению и первый элемент искомое.

количество повторений уже будет.

===============

Это так костыль - там ниже метод получше :)

F
На сайте с 12.09.2003
Offline
120
#2

SELECT t.id_channel, (SELECT COUNT(id_channel) FROM table WHERE id_channel=t.id_channel) as cnt FROM table t ORDER BY cnt DESC LIMIT 1

B
На сайте с 23.10.2006
Offline
170
#3
Faster:
SELECT t.id_channel, (SELECT COUNT(id_channel) FROM table WHERE id_channel=t.id_channel) as cnt FROM table t ORDER BY cnt DESC LIMIT 1

интересно какая скорость выборки будет?:)

ТС.

Протестируйте.

F
На сайте с 12.09.2003
Offline
120
#4

первое что пришло в голову :)

ТС в табличке сколько записей?

edogs software
На сайте с 15.12.2005
Offline
775
#5
mff:
Есть табличка:
id 	ip 	id_channel 	time 

1 70.88.31.247 613 1261099440
2 95.70.82.140 1016 1261099633
3 95.01.82.140 1016 1261099645
4 67.190.111.224 1388 1261099674
5 77.88.31.247 1315 1261099850
6 67.190.111.224 1502 1261099937
7 77.88.31.247 1715 1261099951
8 95.135.36.200 561 1261099988
9 77.88.30.247 1099 1261099995
10 90.71.02.140 1016 1261100724
11 95.71.82.140 1016 1261100731

Нужно выбрать из нее тот id_channel, который больше всего повторяется.

В нашем случае это 1016
Далее уже посчитать сколько раз повторяется.

Спасибо!


select count(*), id_channel from table group by id_channel order by count(*) desc limit 1
Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
mff
На сайте с 21.02.2008
Offline
282
mff
#6

Faster спасибо большое, вот так работает:

$result = mysql_query("select count(id_channel), `id_channel` from `table` group by `id_channel` order by 1 desc limit 1"); 
Faster:
ТС в табличке сколько записей?

Каждый день + 2000-3000 записей

P.S. Будьте удачливы.

B
На сайте с 23.10.2006
Offline
170
#7
Faster:
первое что пришло в голову :)
ТС в табличке сколько записей?

Полагаю у него логи в базе хранятся - и записей там ну может быть от пары тыщ до сотен тыщ :)

ТС. наверное анализатор делает для защиты от парсинга контента левыми ботами, хотя хз.

F
На сайте с 12.09.2003
Offline
120
#8

select id_channel, count(*) as cnt from table group by id_channel order by cnt desc limit 1

Faster добавил 18.12.2009 в 09:52

о, edogs тоже написал :)

_savit
На сайте с 19.03.2006
Offline
135
#9

к слову, IP лучше хранить не в виде CHAR а как INT UNSIGNED

при записи для преобразования IP в число используйте mysql функцию INET_ATON

https://vk-botovod.ru - комбайн ВКонтакте, мультимессенджер, эмулятор жизни аккаунтов
N
На сайте с 06.05.2007
Offline
419
#10

_savit, а что насчет ipv6 ?

Кнопка вызова админа ()
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий