За последние 24 часа нас посетили 34514 программистов и 1751 робот. Сейчас ищут 1180 программистов ...

Живой поиск

Тема в разделе "Прочие вопросы по PHP", создана пользователем japan_parts, 28 сен 2013.

  1. japan_parts

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

    С нами с:
    28 сен 2013
    Сообщения:
    39
    Симпатии:
    0
    [​IMG]

    Вообщем нужно как-то отделить друг от друга три варианта запроса. Попробую объяснить.
    1. вариант toyota
    появляется подсказка
    Toyota Corolla
    Toyota Camry
    Toyota Rav4


    и т.д.
    2. вариант toyota corolla т.е. не знаю что user будет вводить первым
    мне уже не нужно чтобы появлялись опять подсказки из первого варианта, а нужно так
    Toyota corolla NZE121
    Toyota corolla NZE124

    и т.д.
    т.к. поиск в базе веду по совпадениям первых букв, а впереди стоит toyota то и выводится снова все что содержит toyota
    3 под вид это если будет так первым напишут corolla toyota, но это маловероятно...

    3 вариант уже проще, тут нет toyota. Это если user напишет сразу NZE12...
    то подсказка
    Toyota Сorolla NZE121
    Toyota Corolla Fielder NZE121
    Toyota Сorolla NZE124


    и т.д. т.е. поиск идет по такому запросу, ищем по первым буквам
    Код (Text):
    1. SELECT substitute, keys_word FROM keys_words WHERE keys_word LIKE '%".$query."%'  LIMIT 0, 10
    как сделать правильный показ подсказок.
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    то есть тебе надо найти строки, в которых упоминаются все введенные слова?

    тогда, если не заводить специальные поисковые структуры, что-то вроде
    Код (Text):
    1. ...
    2. WHERE (`value` LIKE '%word1%') AND (`value` LIKE '%word2%') AND (`value` LIKE '%word3%') ...
     
  3. japan_parts

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

    С нами с:
    28 сен 2013
    Сообщения:
    39
    Симпатии:
    0
    Не совсем слова а присутствие первых букв/ ваш пример не универсален. потому что нужно четко знать кол-вл ключевиков, а вот например Toyota Mark II это уже три слова
     
  4. japan_parts

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

    С нами с:
    28 сен 2013
    Сообщения:
    39
    Симпатии:
    0
    вообщем действительно указал явно. ведь окончание II нам не нужно... ))
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    я не понял, это "спасибо" или это "ничего не получается" ? )))
     
  6. japan_parts

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

    С нами с:
    28 сен 2013
    Сообщения:
    39
    Симпатии:
    0
    спасибо. но возникла проблема. если начинать писать словосочетание toyota corolla. до corolla еще не дописали (ее как бы еще нет) и показывается все что нарыли на toyota. я уже голову сломал...
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Ой жапан партс это сервис на савёле чтоли? Забавно. Чинился у вас.
     
  8. japan_parts

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

    С нами с:
    28 сен 2013
    Сообщения:
    39
    Симпатии:
    0
    Нет. Не имеем к ним отношения. Можно по делу?
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    по делу вам уже ответили =)
     
  10. japan_parts

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

    С нами с:
    28 сен 2013
    Сообщения:
    39
    Симпатии:
    0
    не получается таким запросом решить проблему
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    что не так? мы ж не телепаты то ж =)
     
  12. japan_parts

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

    С нами с:
    28 сен 2013
    Сообщения:
    39
    Симпатии:
    0
    если начинать писать словосочетание toyota то показываются все подсказки которые содержат toyota. например те которые мне показывать не нужно, которые нужно только для словосочетания toyota corolla
     
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Так вы расскажите, по какому критерию вы отбираете, что нужно показывать, а что нет. Если пользователь ввёл слово toyota, то откуда вы знаете, что его интересует только toyota corolla, а не другая разновидность этих машин?

    Добавлено спустя 2 минуты 29 секунд:
    О, прочитал что вы ведёте поиск по базе только по совпадению первых букв, не въезжаю, как это согласуется с SQL-запросами, что вы здесь представляли. ИМХО, здесь нужно ещё смотреть JavaScript, которым вы организуете отправку Ajax-запросов на сервер. Поскольку когда я делал подобную штуку, на сервер отправлялся весь ввод пользователя, а не только первые буквы...
     
  14. japan_parts

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

    С нами с:
    28 сен 2013
    Сообщения:
    39
    Симпатии:
    0
    ммм..так зачем не весь ввод если нужно именно по первым буквам. а если начинать с toyota то под нее подпадает все что нужно выводить и что не нужно
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    окей. я понимаю так, что вам нужно найти все словосочетания, начинающиеся с тойота и дальше ОДНО слово? а потом, когда выбрано два слова, то уже и модель и прочее.
     
  16. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    естественно, как в любом примере здесь нет полного алгоритма. и вы, кажется, сделали самые нелепые выводы. я не предлагаю искать по конкретному количеству слов. я показал, что для каждого слова нужен отдельный LIKE. пользовательскую строку надо разбить на слова и для каждого слова сочинить LIKE. есть и другие варианты, но давайте аргументированно обсудим этот. пока нет четких условий, не будет и решения.

    вы пишете: "присутствие первых букв". это если я наберу "toyo co" -- оно должно найти toyota corolla, или как? мой пример найдет. а если не бить на слова , то один лайк НЕнайдет.
     
  17. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
  18. japan_parts

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

    С нами с:
    28 сен 2013
    Сообщения:
    39
    Симпатии:
    0

    Ваш пример здесь не работает, я уже сделал так. Второй лайк будет пустым, если введено одно слово toyota а значит выводится все что содержит toyota.
    И где вы видели чтобы так писали?

    Если пишем to то ищется
    Toyota corolla
    Toyota vista
    ....
    Toyota rav4
    Toyota land cruiser
    И тд


    По вашему варианту здесь же выводятся модели, т.к второй лайк пустой на данный момент, их мне выводить не нужно здесь (см.рис выше)


    А если выбирем из этого списка уже словосочетание например toyota rav4 должны выводится модели для данной марки
    Допустим
    gx100
    Gx110
    Gx 80
    И тд
    Вот так должно работать
    Видите в двух вариантах везде toyota есть. Конечно можно было при наличии двух слов резать toyota. Но как узнать что их два. Ведь допустим aston martin, здесь уже марка из двух слов. Универсально тут не получится


    Да все верно вы поняли.

    Добавлено спустя 33 минуты 48 секунд:
    Можно подробней, что вы хотели сказать?
     
  19. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    кто-то из нас двоих люто тупит. чтобы не раздувать флейм, я покидаю эту тему :(
     
  20. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    http://sitear.ru/material/mysql-regexp

    Добавлено спустя 3 минуты 37 секунд:
    О, идея, а если в вашем случае вынести производителя (tayota и др) в отдельную таблицу? А carola и др. разделить на два поля?
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    можно просто добавить поле, куда засунуть первые два слова из того поля.
     
  22. japan_parts

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

    С нами с:
    28 сен 2013
    Сообщения:
    39
    Симпатии:
    0
    Ничего не понятно, можно подробней?
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ой, даже не знаю. может кто другой растолкует. я боюсь, вам всяко лучше во фриланс с таким-то уровнем понимания процессов. и время сэкономите и деньги, которые время.
     
  24. japan_parts

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

    С нами с:
    28 сен 2013
    Сообщения:
    39
    Симпатии:
    0
    Смысл тогда создавать тут темы????
     
  25. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям