![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL-запрос - выборка популярных значений [MySQL]
Vetek © (2004-06-11 21:05:00)Помогите с SQL-запросом !
SQL-запрос - выборка популярных значений
MySQL 3.x
Таблица test57 с одним полем tet типа text
содержимое - почтовые домены - пример: (повторяются)
mail.ru
glasnet.ru
mail.ru
rambler.ru
mail.ru
au.ru
необходимо выбрать самые популярные.
- у меня получается только по отдельности:
("бьюсь" над запросом уже 3 дня)
узнать, какие есть вообще домены:
SELECT DISTINCT `tet` FROM `test57`
и узнать популярность конкретного домена:
SELECT COUNT(`tet`) FROM `test57` where `tet` like('mail.ru')
а потом пробовал из списка доменов скриптом (php) каждый "пробивать" на популярность
и логить в файл, потом этот файл сортировать .. - но работает крайне медленно ..
подскажите, как можно решить поставленную задачу одним SQL- запросом ?
- и возможно ли вообще ?
- если MySQL не в состоянии выполнить такой запрос, то дайте пример запроса для MS Access
Заранее спасибо.
SergP (2004-06-12 12:23:00) [1]
> но что значит "order by 1" ?
Это значит типа "order by tet"
Vetek (2004-06-12 06:43:00) [2]Anatoly Podgoretsky © (11.06.04 22:42) [12]
спасибо ;)
Anatoly Podgoretsky (2004-06-11 22:42:00) [3]Количеством запросов, у тебя же откуда то брались эти tet вот вместо добавления строки увеличивая на единицу.
Vetek (2004-06-11 22:38:00) [4]добавил поле Requests типа Numeric, а чем его заполнять ?
Anatoly Podgoretsky (2004-06-11 22:37:00) [5]SELECT tet, Requests FROM test57 ORDER BY Requests LIMIT 0, 30
Индекс по полю Requests
Vetek (2004-06-11 22:28:00) [6]Anatoly Podgoretsky
спасибо, сейчас попробую
Anatoly Podgoretsky (2004-06-11 22:27:00) [7]Vetek (11.06.04 22:20) [7]
Структуру я указал, будет работать еще в 100 раз быстрее.
Vetek (2004-06-11 22:20:00) [8]YurikGL © (11.06.04 21:46) [4]
а какую сделать структуру ?
- я добавил индекс, стало работать в 50 (!) быстрее !
Vetek (2004-06-11 22:18:00) [9]Mike Kouzmine спасибо, работает !
но что значит "order by 1" ?
я немного переделал:
SELECT `tet` , COUNT( * ) FROM `test57` GROUP BY `tet` ORDER BY 2 DESC LIMIT 0, 30;
Mike Kouzmine (2004-06-11 21:53:00) [10]select tet, count(tet) from test57
group by tet
order by 1
having count(tet) > нижний предел популярности
YurikGL (2004-06-11 21:46:00) [11]
> Vetek (11.06.04 21:23) [3]
Почитай про теорию БД и сделай нормальную структуру. Если не можешь - пиши сюда. Начинать тебе надо с структуры.
Vetek (2004-06-11 21:23:00) [12]прошу без иронии, в SQL я новичок !
- а базу -ещё не выбрал
YurikGL (2004-06-11 21:11:00) [13]
> - если MySQL не в состоянии выполнить такой запрос, то дайте
> пример запроса для MS Access
Вот это - классная фраза
Anatoly Podgoretsky (2004-06-11 21:10:00) [14]Пример того как не надо делать, не соответствует ни одному типу нормализации, записи дублируются, ключа нет.
Сделай хотя бы
tet типа text
Requests Numeric