Вообщем нужно как-то отделить друг от друга три варианта запроса. Попробую объяснить. 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): SELECT substitute, keys_word FROM keys_words WHERE keys_word LIKE '%".$query."%' LIMIT 0, 10 как сделать правильный показ подсказок.
то есть тебе надо найти строки, в которых упоминаются все введенные слова? тогда, если не заводить специальные поисковые структуры, что-то вроде Код (Text): ... WHERE (`value` LIKE '%word1%') AND (`value` LIKE '%word2%') AND (`value` LIKE '%word3%') ...
Не совсем слова а присутствие первых букв/ ваш пример не универсален. потому что нужно четко знать кол-вл ключевиков, а вот например Toyota Mark II это уже три слова
спасибо. но возникла проблема. если начинать писать словосочетание toyota corolla. до corolla еще не дописали (ее как бы еще нет) и показывается все что нарыли на toyota. я уже голову сломал...
если начинать писать словосочетание toyota то показываются все подсказки которые содержат toyota. например те которые мне показывать не нужно, которые нужно только для словосочетания toyota corolla
Так вы расскажите, по какому критерию вы отбираете, что нужно показывать, а что нет. Если пользователь ввёл слово toyota, то откуда вы знаете, что его интересует только toyota corolla, а не другая разновидность этих машин? Добавлено спустя 2 минуты 29 секунд: О, прочитал что вы ведёте поиск по базе только по совпадению первых букв, не въезжаю, как это согласуется с SQL-запросами, что вы здесь представляли. ИМХО, здесь нужно ещё смотреть JavaScript, которым вы организуете отправку Ajax-запросов на сервер. Поскольку когда я делал подобную штуку, на сервер отправлялся весь ввод пользователя, а не только первые буквы...
ммм..так зачем не весь ввод если нужно именно по первым буквам. а если начинать с toyota то под нее подпадает все что нужно выводить и что не нужно
окей. я понимаю так, что вам нужно найти все словосочетания, начинающиеся с тойота и дальше ОДНО слово? а потом, когда выбрано два слова, то уже и модель и прочее.
естественно, как в любом примере здесь нет полного алгоритма. и вы, кажется, сделали самые нелепые выводы. я не предлагаю искать по конкретному количеству слов. я показал, что для каждого слова нужен отдельный LIKE. пользовательскую строку надо разбить на слова и для каждого слова сочинить LIKE. есть и другие варианты, но давайте аргументированно обсудим этот. пока нет четких условий, не будет и решения. вы пишете: "присутствие первых букв". это если я наберу "toyo co" -- оно должно найти toyota corolla, или как? мой пример найдет. а если не бить на слова , то один лайк НЕнайдет.
Ваш пример здесь не работает, я уже сделал так. Второй лайк будет пустым, если введено одно слово toyota а значит выводится все что содержит toyota. И где вы видели чтобы так писали? Если пишем to то ищется Toyota corolla Toyota vista .... Toyota rav4 Toyota land cruiser И тд По вашему варианту здесь же выводятся модели, т.к второй лайк пустой на данный момент, их мне выводить не нужно здесь (см.рис выше) А если выбирем из этого списка уже словосочетание например toyota rav4 должны выводится модели для данной марки Допустим gx100 Gx110 Gx 80 И тд Вот так должно работать Видите в двух вариантах везде toyota есть. Конечно можно было при наличии двух слов резать toyota. Но как узнать что их два. Ведь допустим aston martin, здесь уже марка из двух слов. Универсально тут не получится Да все верно вы поняли. Добавлено спустя 33 минуты 48 секунд: Можно подробней, что вы хотели сказать?
http://sitear.ru/material/mysql-regexp Добавлено спустя 3 минуты 37 секунд: О, идея, а если в вашем случае вынести производителя (tayota и др) в отдельную таблицу? А carola и др. разделить на два поля?
ой, даже не знаю. может кто другой растолкует. я боюсь, вам всяко лучше во фриланс с таким-то уровнем понимания процессов. и время сэкономите и деньги, которые время.
http://qb7.ru/7A73F4E4/test.html Код (PHP): $words = array_filter(array_map('trim', explode(' ', $term)), 'strlen'); if (count($words)) { $words = array_map( function($s) use($link) { $s = mysqli_real_escape_string($link, $s); return "`make_model` LIKE '%{$s}%'"; }, $words); $cond = implode(' AND ', $words); /// ... }