|
|
|
| Добрый день.
Есть табличка в которой 3,5 миллиона записей, надо из столбца данной таблицы выбрать все уникальные слова, которые в нем встречаются и записать их в другую таблицу для последующего использования в качестве быстрого поиска.
Пробовал делать вот так:
SELECT TrackTitle, COUNT(*) AS cnt FROM track GROUP BY TrackTitle ORDER BY cnt DESC
|
Но результат не тот, который необходим.
Структура таблицы (упрощенная):
id_t1
TrackTitle
На выходе хотелось бы получить:
Слово из TrackTitle, список id_t1 в котором оно встречается.
Подскажите как можно только запросом, без привлечения php, решить данную задачу. | |
|
|
|
|
|
|
|
для: maxfade
(13.08.2012 в 10:54)
| | Вам вероятно лучше воспользоваться функцией GROUP_CONCAT()
SELECT
TrackTitle,
GROUP_CONCAT() AS cnt
FROM track
GROUP BY
TrackTitle
ORDER BY
cnt DESC
|
| |
|
|
|
|
|
|
|
для: cheops
(13.08.2012 в 11:09)
| | При выполнении, через некоторое время, пишет:
Error writing file '/tmp/MYm419ja' (Errcode: 28)
Есть особенности использования, мне нужно на выходе получить уникальное слово и список id-полей где оно встречается.
Также обращаю внимание, что TrackTitle может состоять и нескольких слов. | |
|
|
|
|
|
|
|
для: maxfade
(13.08.2012 в 11:45)
| | Придумал такую конструкцию:
SELECT SUBSTRING_INDEX( TrackTitle, ' ', 1) AS w1,
IF(SUBSTRING_INDEX(SUBSTRING_INDEX( TrackTitle, ' ', 2), ' ', -1) = SUBSTRING_INDEX( TrackTitle, ' ', 1), '', SUBSTRING_INDEX(SUBSTRING_INDEX( TrackTitle, ' ', 2), ' ', -1)) AS w2,
IF(SUBSTRING_INDEX(SUBSTRING_INDEX( TrackTitle, ' ', 3), ' ', -1) = SUBSTRING_INDEX(SUBSTRING_INDEX( TrackTitle, ' ', 2), ' ', -1), '', SUBSTRING_INDEX(SUBSTRING_INDEX( TrackTitle, ' ', 3), ' ', -1)) AS w3,
IF(SUBSTRING_INDEX(SUBSTRING_INDEX( TrackTitle, ' ', 4), ' ', -1) = SUBSTRING_INDEX(SUBSTRING_INDEX( TrackTitle, ' ', 3), ' ', -1), '', SUBSTRING_INDEX(SUBSTRING_INDEX( TrackTitle, ' ', 4), ' ', -1)) AS w4,
IF(SUBSTRING_INDEX(SUBSTRING_INDEX( TrackTitle, ' ', 5), ' ', -1) = SUBSTRING_INDEX(SUBSTRING_INDEX( TrackTitle, ' ', 4), ' ', -1), '', SUBSTRING_INDEX(SUBSTRING_INDEX( TrackTitle, ' ', 5), ' ', -1)) AS w5,
IF(SUBSTRING_INDEX(SUBSTRING_INDEX( TrackTitle, ' ', 6), ' ', -1) = SUBSTRING_INDEX(SUBSTRING_INDEX( TrackTitle, ' ', 5), ' ', -1), '', SUBSTRING_INDEX(SUBSTRING_INDEX( TrackTitle, ' ', 6), ' ', -1)) AS w6
FROM track limit 10
|
Суть в том, что берется каждое слово, если его нет, то пусто.
Как теперь из всего этого хозяйства собрать таблицу уникальных слов и к каждому сделать список id полей в которых оно встречается? | |
|
|
|
|
|
|
|
для: maxfade
(13.08.2012 в 13:07)
| | Ну что, есть идеи... Не хотелось бы использовать php т.к. скорее всего не хватит памяти при выборке. | |
|
|
|
|
|
|
|
для: maxfade
(13.08.2012 в 17:32)
| | Идей много и все они далеко выходят за рамки бесплатных.
Реорганизация структуры БД процесс я так понимаю разовый, а при таких обстоятельствах и РНР не грех использовать, если знаете как решить поставленную задачу.
Я так понимаю один заголовок может состоять из нескольких слов и каждое из них должно попасть в новую таблицу с одним и тем же id (+ другие id по конкретному слову)? | |
|
|
|
|