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

danneo

Честный
Регистрация
13 Ноя 2007
Сообщения
1.526
Реакции
121
Перед тем, как пользователь добавит фирму, нужно найти дубли.
Я придумал искать по названию, по адресу. Не может быть двух фирм с одинаковым названием по одному адресу.
Вопрос: как осуществлять поиск по базе данных (mysql), если название может быть длинным, какой код запроса?
Например:
- ООО "Строительная компания "каменный мост"
- МУЗ "Муниципальное образовательное учреждение имени Серивково № 23"
как такие названия искать?
И как искать, чтобы не нагружать сервер (думаю делать поиск через ajax)?
В базе у меня название, город, улица, дом, офис в отдельных полях.
 
повесить уникальные индексы на колонки название и адрес, мускул всё сделает за тебя, тебе только нужно будет обработать ошибку, когда мускул будет ругаться на дубль записи.
 
Вопрос: как осуществлять поиск по базе данных (mysql), если название может быть длинным, какой код запроса?
Например:
- ООО "Строительная компания "каменный мост"
- МУЗ "Муниципальное образовательное учреждение имени Серивково № 23"
как такие названия искать?
Такие названия искать обычным запросом, но повесить на эту колонку индекс, чтобы база данных не загибалась от перебора всего содержимого базы.
 
повесить уникальные индексы на колонки название и адрес, мускул всё сделает за тебя, тебе только нужно будет обработать ошибку, когда мускул будет ругаться на дубль записи.
это так что ли:
Код:
SELECT * FROM table WHERE name = 'МУЗ "Муниципальное образовательное учреждение имени Серивково № 23 AND city = 45 street = 'Мира' AND house = 15"'
?
А если пользователь ввел название у фирмы МУЗ МОУ им. Серивково?
мне бы как-нибудь вывести примерные результаты, похожие в данном городе. Например, как на этом же форуме, когда создается новая тема и вверху выводятся различные темы, типа по такому же вопросу.
 
А если пользователь ввел название у фирмы МУЗ МОУ им. Серивково?
Примерно так (но сокращения типа "МОУ" искать не будет - тут надо что еще мудрить)
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"); // Ищем все слова из названия

Возможно быдлокодерство, но думаю, что надо двигаться в этом направлении
 
Примерно так (но сокращения типа "МОУ" искать не будет - тут надо что еще мудрить)
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"); // Ищем все слова из названия

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

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