Как искать в БД дубли фирм?

Тема в разделе "Базы данных", создана пользователем danneo, 10 мар 2014.

Модераторы: latteo
  1. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.418
    Симпатии:
    109
    Перед тем, как пользователь добавит фирму, нужно найти дубли.
    Я придумал искать по названию, по адресу. Не может быть двух фирм с одинаковым названием по одному адресу.
    Вопрос: как осуществлять поиск по базе данных (mysql), если название может быть длинным, какой код запроса?
    Например:
    - ООО "Строительная компания "каменный мост"
    - МУЗ "Муниципальное образовательное учреждение имени Серивково № 23"
    как такие названия искать?
    И как искать, чтобы не нагружать сервер (думаю делать поиск через ajax)?
    В базе у меня название, город, улица, дом, офис в отдельных полях.
     
  2. Bezhev

    Bezhev

    Регистр.:
    26 дек 2012
    Сообщения:
    362
    Симпатии:
    123
    повесить уникальные индексы на колонки название и адрес, мускул всё сделает за тебя, тебе только нужно будет обработать ошибку, когда мускул будет ругаться на дубль записи.
     
    Kenny и Цукер нравится это.
  3. dwarf

    dwarf Постоялец

    Регистр.:
    12 июн 2011
    Сообщения:
    88
    Симпатии:
    18
    Такие названия искать обычным запросом, но повесить на эту колонку индекс, чтобы база данных не загибалась от перебора всего содержимого базы.
     
  4. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.418
    Симпатии:
    109
    это так что ли:
    Код:
    SELECT * FROM table WHERE name = 'МУЗ "Муниципальное образовательное учреждение имени Серивково № 23 AND city = 45 street = 'Мира' AND house = 15"'
    ?
    А если пользователь ввел название у фирмы МУЗ МОУ им. Серивково?
    мне бы как-нибудь вывести примерные результаты, похожие в данном городе. Например, как на этом же форуме, когда создается новая тема и вверху выводятся различные темы, типа по такому же вопросу.
     
  5. Sergo_Sev

    Sergo_Sev Творец

    Регистр.:
    14 июн 2008
    Сообщения:
    571
    Симпатии:
    188
    Примерно так (но сокращения типа "МОУ" искать не будет - тут надо что еще мудрить)
    PHP:
      $name "МУЗ Серивково";
        
    $name explode" "$name ); // разбиваем слова через пробел
       
        
    foreach ( $name as $name2 ) {
        
    $name3[] = "(`name` LIKE '%".$name2."%')";
        }

    $implode_name implode" AND "$name3 );
    $row_name mysql_query"SELECT * FROM table WHERE ".$implode_name." LIMIT 0 , 1"); // Ищем все слова из названия
    Возможно быдлокодерство, но думаю, что надо двигаться в этом направлении
     
    danneo нравится это.
  6. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.418
    Симпатии:
    109
    только нужно не AND, а OR, я так полагаю. Мне же нужно вывести похожие фирмы. Вдруг в БД не так немного записано, как ввел пользователь.
    только возникает не очень удобный момент. Если ввести в названии "школа", то откроется много школ города.
    Не знаю, можно ли это решить как-то. Подозреваю, что придется пользователю терпеть :)
     
  7. Sergo_Sev

    Sergo_Sev Творец

    Регистр.:
    14 июн 2008
    Сообщения:
    571
    Симпатии:
    188
    Тогда можно сделать какой то фильтр на слова "школа", "компания"
    Что бы сразу отбросить поиск по этим словам

    Насчет OR - в таком случае будет куча похожих результатов т.к. одно совпадающее слово можно везде отыскать
     
  8. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.418
    Симпатии:
    109
    это как сделать?
     
  9. dwarf

    dwarf Постоялец

    Регистр.:
    12 июн 2011
    Сообщения:
    88
    Симпатии:
    18
    Код:
    ALTER TABLE  `table_name` ADD UNIQUE  `name_of_index` (  `field1` ,  `field2` )
    Этот запрос создаст уникальный индекс на 2х полях: field1 и field2
    Нужны еще поля - дописать через запятую. Или воспользоваться каким-нибудь phpmyadmin, там можно в режиме структуры добавлять индексы к таблице любые без проблем, не написав ни одного запроса.