Выборка наиболее часто встречающихся записей

phprus

Moderator
Команда форума
Выборка наиболее часто встречающихся записей

Дана таблица log:
id - bigint(20)
old_id - bigint(20)
ip - int(11)
time - int(11)
userid - int(10)
uid_got - varchar(255)
uid_set - varchar(255)
start - int(10)

И дан список идентификаторов $ids.
и есть запрос:

'SELECT id
FROM `log`
WHERE `old_id`
IN ( '.join(',', $ids).' )
GROUP BY id'

Необходимо модифицировать запрос так, чтобы чем чаше в несгруппированном результате всчтречается данное значение id тем выше в сгруппированном результате будут эта запись. В случае совпадения кол-ва появления записей с одиноковым id выше необходимо ставить тот id у которого максимальное значение поля time больше.

А также я бы хотел услышать ваше мнение по поводу того какие индексы необходимо добавить в таблицу для выполнения такого рода запросов.
 

Popoff

popoff.donetsk.ua
'SELECT id,count(*) as c,max(time) as t
FROM `log`
WHERE `old_id`
IN ( '.join(',', $ids).' )
GROUP BY id
order by
c desc,
t desc
'

индекс нужен сцепной по двум полям (id,time). При таком индексе, может оказаться, запрос будет выполняться только по дереву индексов, без обращения к таблице данных.
 
Сверху