Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как составить список всех уникальных слов без PHP
 
 автор: maxfade   (13.08.2012 в 10:54)   письмо автору
 
 

Добрый день.

Есть табличка в которой 3,5 миллиона записей, надо из столбца данной таблицы выбрать все уникальные слова, которые в нем встречаются и записать их в другую таблицу для последующего использования в качестве быстрого поиска.

Пробовал делать вот так:

SELECT TrackTitle, COUNT(*) AS cnt FROM track GROUP BY TrackTitle ORDER BY cnt DESC


Но результат не тот, который необходим.

Структура таблицы (упрощенная):
id_t1
TrackTitle

На выходе хотелось бы получить:
Слово из TrackTitle, список id_t1 в котором оно встречается.

Подскажите как можно только запросом, без привлечения php, решить данную задачу.

  Ответить  
 
 автор: cheops   (13.08.2012 в 11:09)   письмо автору
 
   для: maxfade   (13.08.2012 в 10:54)
 

Вам вероятно лучше воспользоваться функцией GROUP_CONCAT()
SELECT
  TrackTitle,
  GROUP_CONCAT() AS cnt
FROM track
GROUP BY
  TrackTitle
ORDER BY
  cnt DESC

  Ответить  
 
 автор: maxfade   (13.08.2012 в 11:45)   письмо автору
 
   для: cheops   (13.08.2012 в 11:09)
 

При выполнении, через некоторое время, пишет:
Error writing file '/tmp/MYm419ja' (Errcode: 28)

Есть особенности использования, мне нужно на выходе получить уникальное слово и список id-полей где оно встречается.

Также обращаю внимание, что TrackTitle может состоять и нескольких слов.

  Ответить  
 
 автор: maxfade   (13.08.2012 в 13:07)   письмо автору
 
   для: 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 в 17:32)   письмо автору
 
   для: maxfade   (13.08.2012 в 13:07)
 

Ну что, есть идеи... Не хотелось бы использовать php т.к. скорее всего не хватит памяти при выборке.

  Ответить  
 
 автор: Valick   (13.08.2012 в 18:09)   письмо автору
 
   для: maxfade   (13.08.2012 в 17:32)
 

Идей много и все они далеко выходят за рамки бесплатных.
Реорганизация структуры БД процесс я так понимаю разовый, а при таких обстоятельствах и РНР не грех использовать, если знаете как решить поставленную задачу.
Я так понимаю один заголовок может состоять из нескольких слов и каждое из них должно попасть в новую таблицу с одним и тем же id (+ другие id по конкретному слову)?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования