Как проверить уникальность контента в БД mysql

Статус
В этой теме нельзя размещать новые ответы.

dandandan

Мой дом здесь!
Регистрация
7 Авг 2008
Сообщения
1.036
Реакции
292
Есть база данных mysql. В ней примерно 100 000 записей. Есть записи которые практически идентичны. Например:
Вася хочет программировать и Вася хочет программировать на php, Саша хочет программировать.
Как найти все похожие строки в mysql? Чем отличаются строки в Базе данных - неизвестно; длины строк - тоже неизвестны. Хотелось бы иметь такую обработку, которая бы находила похожие на 70% друг да друга строки в mysql. :) Соответсвенно все на php.
Если что-то непонятно высказал - напишите. Попробую перефразировать по-другому.
 
я так понял, что нужно составить запрос к БД с повторяющейся фразой "хочет программировать", думаю самый легкий способ это сделать так
PHP:
SELECT * FROM `table` WHERE `content` LIKE '%хочет программировать%'
 
я так понимаю ТС хочет как раз найти, чем же походи эти записи.
как вариант сделать выборку всех записей из базы, каждую полученную запись, а именно текст разбить на слова и составить массив хранящий частоту использования тех или иных слов. и на основе этих данных делать выборки дальше.

но данный вариант будет достаточно тяжеловат как для сервера так и для базы
 
я так понимаю ТС хочет как раз найти, чем же похожи эти записи.

Примерно так. Т.е. хочу найти в БД похожие данные и удалить те, которые отличаются одни или несколькими словами. Само содержание текста, который в БД хранится Я не знаю.
В идеале должен остаться текст ,например, 70% слов в каждой ячейки БД которого уникальны.
Код:
SELECT * FROM `table` WHERE `content` LIKE '%хочет программировать%'
к сожалению не подходит, потому что я не знаю содержание ячеек %хочет программировать%

Как вариант вижу вариант разбива текста на куски и выполнения кучи запросов.
Код:
SELECT * FROM `table` WHERE `content` LIKE '%ВЫБРАННЫЙ ТЕКСТ%'
но думаю, что есть более оптимальный вариант.
 
Есть функция similar_text(), но проганять через неё 100.000 записей - это жесть.
 
Это делается через Полнотекстовый поиск в MySQL

mysql> SELECT *,MATCH (content) AGAINST('хочет программировать') FROM table
WHERE MATCH (content) AGAINST ('хочет программировать')>0.7

Выдаст с релевантностью фраз больше 70%
 
Это делается через Полнотекстовый поиск в MySQL

mysql> SELECT *,MATCH (content) AGAINST('хочет программировать') FROM table
WHERE MATCH (content) AGAINST ('хочет программировать')>0.7

Выдаст с релевантностью фраз больше 70%

Ваш вариант не подходит, почитайте внимательно длины строк - тоже неизвестны.

Уже долго ищу подобное решение и ничего не придумал, советовали смотреть у сторну шиллингов но там не нашел готового решения.
 
В MSSQL есть такое понятие как курсоры, может в mySQL есть аналог.
 
Ваш вариант не подходит, почитайте внимательно длины строк - тоже неизвестны.
Какое это имеет отношение к предложенному варианту?

ЗЫ шиллинг - это английская монета.
 
алгоритм:

по циклу пройтись по все базе по очереди
{
выбрать словосочитание
разбить его на слова - split()
после искать в базе всевозможные комбинации слов и записывать результаты.
}

100000 запросов для mysql ерунда, думаю такой скриптик перешарит его за часик..
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху