За последние 24 часа нас посетили 45354 программиста и 1813 роботов. Сейчас ищут 809 программистов ...

поисковый запрос ИЛИ

Тема в разделе "MySQL", создана пользователем wap7.ru, 2 сен 2008.

  1. wap7.ru

    wap7.ru Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    28
    Симпатии:
    0
    есть поля

    username || city
    ============
    паша || москва
    ============

    юзер делает запрос

    "паша москва"

    $sql_query = "SELECT * FROM base WHERE (username LIKE '%$q%' OR city LIKE '%$q%' )";

    отдает 0 так как нет данных "паша москва"

    понимаю как это сделать средствами PHP

    но это же видимо неверное решение

    подскажите как средствами mysql делать запрос по любому вхождению

    в каком направлении копать?
     
  2. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    wap7.ru
    Копай в сторону FULLTEXT индекса и запросов. Там можно и поля объединять в один индекс.
     
  3. wap7.ru

    wap7.ru Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    28
    Симпатии:
    0
    спасибо!

    хочу уточнить - FULLTEXT намного медленнее обычного запроса

    "SELECT * FROM base WHERE (username LIKE '%$q%' )

    какие параметры или настройки могут его оптимизирвать
     
  4. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    wap7.ru
    FULLTEXT намного быстрее запросов LIKE, особенно объединенных OR'ами :)
     
  5. wap7.ru

    wap7.ru Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    28
    Симпатии:
    0
  6. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    wap7.ru
    Ты же про запрос SELECT говорил, так? Выборка быстрее, операции обновления (INSERT/UPDATE/DELETE) - медленнее.
    За все надо платить :)
     
  7. wap7.ru

    wap7.ru Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    28
    Симпатии:
    0
    спасибо!
     
  8. wap7.ru

    wap7.ru Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    28
    Симпатии:
    0
    подскажите еще плиз как сделать запрос из такой базы

    id || name1 || name2

    типа
    [sql]
    DELETE FROM db WHERE `id`='$id' AND (`name1 `='$name1' OR `name2 `='$name2' ) [/sql]
     
  9. decoder

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

    С нами с:
    11 фев 2006
    Сообщения:
    469
    Симпатии:
    0
    Гм... INSERT же вроде б быстрее выборки О_о Или я путаю...
     
  10. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    decoder
    У Фултекста? Хм, что-то очень сомневаюсь...
    Ведь после каждого инсерта надо еще индекс обновить, а это
    - найти все слова в добавляемой строке
    - каждое слово добавить в индекс, если раньше его там не было
    - для каждого слова добавить ссылку на добавленную запись

    Меня радует, как такой "индекс" реализован в некоторых форумных движках и ЦМС-ках ;) там для списка слов - отдельная таблица, для связи "слово->текст" - еще одна таблица... все это работает медленно и жрет кучу места... все это надо руками обновлять... а в мускуле все то же самое сделано нативно (и гораздо более безбажно)... жаль, что другие базы не поддержали инициативу...
     
  11. decoder

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

    С нами с:
    11 фев 2006
    Сообщения:
    469
    Симпатии:
    0
    Dagdamor
    Прошу прощения, как-то "избирательно" читал топик :)