Задача SQL

 
Sometime CMS Community
Посетитель
no avatar
Сообщений: 68
Всем привет!
Есть задача на SQL, честно говоря, уже несколько дней не могу решить, чтобы работало более менее БЫСТРО.
Суть задачи.
Таблица tabl, поля item_id (int), log (varchar), и др.
item_id - не праймари кей, но INDEX (item_id,a)!
Пример tabl:
item_id , log
6 ааа
2 ббб
3 ввв
2 ввв
1 ггг
2 ааа
Что нужно получить на выходе:
item_id, num
6 1
2 2
3 3
2 3
1 4
2 1
Т.е. нужно "преобразовать" log из varchar в номер по порядку вхождения log в таблицу. Будет очень желательно сделать это за минимум запросов, но приоритетом является скорость работы.
В чем проблема:
1) Поле log - произвольное (там содержится длинный varchar), поэтому нельзя создать таблицу id, log, чтобы делать JOIN.
2) Также нужно учитывать порядок вхождения.
3) Таблица большая, т.е. от 1 тысячи строк, поэтому вложенные запросы как-то не фурчат.

Собственно раньше делался вложенный запрос типа
Код PHP:
  1. SELECT item_id, IF (log IN (SELECT DISTINCT log FROM tabl t WHERE t.item_id <> t1.item_id), порядковый_номер_вхождения_log, перменная=перменная+1) FROM table t1
Где порядковый_номер_вхождения_log - соотв. еще один тяжелый запрос! sad Который считает строку без повторений log где есть log.

Как видно - это ОЧЕНЬ тяжелый запрос и уже на 100 строках он работает более 10 секунд.

Буду рад любым советам, в том числе креативным, типа (быстрой) обработки на php, так как сейчас собственно, это и обрабатыватся на php, чтобы не грузить SQL-сервер.
Редактировалось: 1 раз (Последний: 2 октября 2010 в 06:28)
В начало страницы
Следующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.