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

Тема в разделе "PHP", создана пользователем dandandan, 3 дек 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    975
    Симпатии:
    255
    Есть база данных mysql. В ней примерно 100 000 записей. Есть записи которые практически идентичны. Например:
    Вася хочет программировать и Вася хочет программировать на php, Саша хочет программировать.
    Как найти все похожие строки в mysql? Чем отличаются строки в Базе данных - неизвестно; длины строк - тоже неизвестны. Хотелось бы иметь такую обработку, которая бы находила похожие на 70% друг да друга строки в mysql. :) Соответсвенно все на php.
    Если что-то непонятно высказал - напишите. Попробую перефразировать по-другому.
     
  2. Limmer

    Limmer

    Регистр.:
    3 июн 2008
    Сообщения:
    206
    Симпатии:
    45
    я так понял, что нужно составить запрос к БД с повторяющейся фразой "хочет программировать", думаю самый легкий способ это сделать так
    PHP:
    SELECT FROM `tableWHERE `contentLIKE '%хочет программировать%'
     
  3. Crazy108

    Crazy108 Создатель

    Регистр.:
    6 сен 2008
    Сообщения:
    45
    Симпатии:
    7
    я так понимаю ТС хочет как раз найти, чем же походи эти записи.
    как вариант сделать выборку всех записей из базы, каждую полученную запись, а именно текст разбить на слова и составить массив хранящий частоту использования тех или иных слов. и на основе этих данных делать выборки дальше.

    но данный вариант будет достаточно тяжеловат как для сервера так и для базы
     
  4. dandandan

    dandandan

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

    Как вариант вижу вариант разбива текста на куски и выполнения кучи запросов.
    Код:
    SELECT * FROM `table` WHERE `content` LIKE '%ВЫБРАННЫЙ ТЕКСТ%' 
    
    но думаю, что есть более оптимальный вариант.
     
  5. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Есть функция similar_text(), но проганять через неё 100.000 записей - это жесть.
     
  6. localhost:80

    localhost:80 Постоялец

    Регистр.:
    4 дек 2008
    Сообщения:
    102
    Симпатии:
    15
    Это делается через Полнотекстовый поиск в MySQL

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

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

    myweb Среда обитания WEB

    Регистр.:
    10 сен 2007
    Сообщения:
    539
    Симпатии:
    246
    Ваш вариант не подходит, почитайте внимательно длины строк - тоже неизвестны.

    Уже долго ищу подобное решение и ничего не придумал, советовали смотреть у сторну шиллингов но там не нашел готового решения.
     
  8. VMY

    VMY Прохожие

    В MSSQL есть такое понятие как курсоры, может в mySQL есть аналог.
     
  9. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Какое это имеет отношение к предложенному варианту?

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

    NoN Постоялец

    Регистр.:
    25 ноя 2008
    Сообщения:
    79
    Симпатии:
    33
    алгоритм:

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

    100000 запросов для mysql ерунда, думаю такой скриптик перешарит его за часик..
     
Статус темы:
Закрыта.