За последние 24 часа нас посетили 16529 программистов и 1551 робот. Сейчас ищут 2094 программиста ...

Поиск в базе.

Тема в разделе "PHP и базы данных", создана пользователем AviOn, 1 дек 2008.

  1. AviOn

    AviOn Активный пользователь

    С нами с:
    16 июл 2007
    Сообщения:
    171
    Симпатии:
    0
    Адрес:
    Кировоград, Украина
    Привет, умельцы.
    Столкнулся с проблемой. Нужен поиск по базе, база довольно большая. Поиск должен проводится по имени, городу, описания.
    Сделал типа:
    Код (Text):
    1. ALTER TABLE `table` ADD FULTEXT (name, city, description);
    В чем прикол. В поле name например имеется имя (Василий Иванов), вот надо организовать поиск что бы выводило согластно такому запросу или (Иванов Василий), Сначала этого василия, а потом все остальное.
    Релевантность не катит. Или я чето не то делаю.
    Пробывал в бинарном
    Код (Text):
    1.  MATCH (name) AGAINST ('+иванов +василий' IN BOOLEAN MODE)
    Тоже не дует. Блин, подскажите, может я чето не то делаю...
     
  2. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    А что за тип данных у столбцов?
     
  3. AviOn

    AviOn Активный пользователь

    С нами с:
    16 июл 2007
    Сообщения:
    171
    Симпатии:
    0
    Адрес:
    Кировоград, Украина
    Kreker,

    name - VARCHAR
    city - VARCHAR
    description - TEXT
     
  4. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Я бы посоветовал полный индекс делать по TEXT, а по varchar искать через LIKE, ибо в них хранятся короткие данные, с которыми могут быть проблемы у полнотекста. В запросе на фамилию разбивать слова и подставлять каждое к LIKE.

    P.S. А в приведеном примере, может быть виной регистр. Название кодировки в базе/столбцах не должна заканчиваться на bi
     
  5. AviOn

    AviOn Активный пользователь

    С нами с:
    16 июл 2007
    Сообщения:
    171
    Симпатии:
    0
    Адрес:
    Кировоград, Украина
    Я делал типа такого
    Код (Text):
    1. WHERE name LIKE '%василий%' || name LIKE '%иванов%'
    но вывод был не таким как мне надо, этот человек был фиг знает где, что его найти не реально....
     
  6. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    А если провернуть так:
    [sql]WHERE (name LIKE '%василий%' AND name LIKE '%иванов%') OR (name LIKE '%василий%' OR name LIKE '%иванов%') [/sql]
    P.S. А вообще, можно и без лайков)
    [sql]WHERE name = 'василий иванов' OR name = 'иванов василий'[/sql]
     
  7. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Сделай 1 запрос на точное соответствие, а вторым ищи релевантные через FULLTEXT.
     
  8. AviOn

    AviOn Активный пользователь

    С нами с:
    16 июл 2007
    Сообщения:
    171
    Симпатии:
    0
    Адрес:
    Кировоград, Украина
    Kreker
    Неа не помогает. Оно то находит но точное совпадение на первое место не выводит.

    Sergey89, есть одно - НО. Как тогда организовывать пейджер?