ну это форум для программистов. я не знаю, есть ли для вас смысл ждать совета, ибо вы их часто не понимаете.
Это то понятно, а как чтоб модели кузовов еще показывались когда выбрали например toyota corolla тут у вас их нет. Например nze121 nze124 nze 120
а ничего специально не надо делать. да, в моем списке нет конкретно таких названий. это демо база со случайного места. есть другие длинные названия, типа "Ford E-350 Super Duty" или "Aston Martin Vanquish S". поисковому механизму глубоко всё равно: это номер кузова или это часть названия модели. можно подсунуть на вход другую вьюшку с номером мотора или размером колеса, что угодно.
что значит разделить на два поля? получается будет два запроса. а мне пришла мысль тоже на два запроса, когда два слова в поиске, брать каждое и проверять если оно в базе если есть делать второй запрос на остаток, как думаете получится? Добавлено спустя 4 минуты 39 секунд: простите, а для чего столько не понятных манипуляций????
не, два запроса не будет. просто легче ограничить при вводе первого слова поиск только по полю, содержащему два слова. а когда два слова ввели, то искать по полному названию. это удобно, ящитаю.
удобно то удобно, но как-то не профессионально. это нужно помнить при заполнении таблицы что поля разные имеются...
а, ну вам видней, что профессионально, а что нет Добавлено спустя 1 минуту 3 секунды: ладно, шучу. ваше беспокойство понятно, но безосновательно. Один раз пропишете в коде - и зашибись. Профессионально по-пацански можно триггер внутри БД замутить, но это же как раз за гранью.
Я очень дружелюбный. Очень. Просто забавно когда люди рассуждают о том, о чем вроде как понятия не имеют. =) Я не думаю, что моя позиция должна вас обижать. Просто называю вещи своими именами.
так сделал, посмотрите правильно? Код (Text): $mas=explode(" ",$query); $base= "SELECT substitute, keys_word FROM keys_words WHERE keys_word LIKE '%".$mas[0]."%'"; $res = mysql_query($base); if(mysql_num_rows($res)>0 && $mas[1]!=false) { $base="SELECT substitute, keys_word FROM keys_words WHERE keys_word LIKE '%".$mas[1]."%'"; $res = mysql_query($base); } while($str = mysql_fetch_array($res)) { $array[]= $str[substitute]; }
даже не смешно =) вы можете по-строчно прокомментировать ваш скрипт? что по-вашему вы получаете в while($str = mysql_fetch_array($res))?
Я имею ввиду составить сложный запрос при сравнении и выборке в условии брать только первую букву и сравнить с тем, что ищем по первым буквам, также выбирая первую букву каждого слова сравнивая его первую букву предварительно записывая их в коллекцию найденных по первой букве и выводя их в список.
очевидно получаю данные из базы и циклом их вывожу, разве нет? это конструкция из книги, я ничего сам не придумывал Добавлено спустя 16 минут 41 секунду: не очень понятно, что вы хотели предложить
Да, это форум виноват, что ты не понимаешь ничерта =) злой форум. однако я тебе рекомендую перечитать топик, т.к. ты продвинулся в данном вопросе, и ты можешь иначе воспринять то, что было написано на первой странице. например мою рекомендацию сделать еще одно поле в таблице с двумя словами: производитель, модель. Это бы тебе помогло.
действительно создание второго поля решило проблему. вот что получилось, прокомментируйте пожалуйста Код (PHP): <?php $mas = explode(" ", $query); $array = array(); $key1 = "LIKE '%" . $mas[0] . "%'"; $key2 = $key1; for ($i = 0; $i < count($mas); $i++) { $base = "SELECT substitute, avatar, keys_word FROM keys_words WHERE keys_word " . $key1 . ""; $res = mysql_query($base); if (mysql_num_rows($res) && !$mas[$i + 1]) { break; } if (mysql_num_rows($res) && $mas[$i + 1]) { $key1 .=" AND keys_word LIKE'%" . $mas[$i + 1] . "%'"; } else { for ($i = 0; $i < count($mas); $i++) { $base = "SELECT substitute, avatar, keys_word FROM keys_words WHERE substitute " . $key2 . ""; $res = mysql_query($base); if (mysql_num_rows($res) > 0 && $mas[$i + 1]) { $array[0] = array('name' => "ident"); $key2 .=" AND substitute LIKE'%" . $mas[$i + 1] . "%'"; } } } } while ($str = mysql_fetch_array($res)) { $array[] = array('name' => "$str[substitute]", 'avatar' => "$str[avatar]"); } $str = json_encode($array); echo($str);
ой, что-то сложновато и цикл в цикле. я ща плохо соображаю. Оно поставленную задачу решает? я опишу как на мой взгляд стоит поступить во-первых, искать надо по второму полю содержащему производителя и модель. искать надо $query% потому что почитай что такое процент в запросе, и не нужны тебе %запрос% конструкции, а нужны запрос% Во вторых, выбирать надо DISTINCT. А я бы вообще завел отдельные таблицы для производителей и моделей. После того, как подсунуты уникальные варианты человеку, надо только тогда уже искать по записям с остальными словами.
решать то решает, а вот то что сложновато согласен... я и так ищу сначало по производителю, если там нет совпадений, значит введена в поле модель