За последние 24 часа нас посетили 35348 программистов и 1745 роботов. Сейчас ищут 1066 программистов ...

Живой поиск

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

  1. igordata

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

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

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

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

    Это то понятно, а как чтоб модели кузовов еще показывались когда выбрали например toyota corolla тут у вас их нет. Например nze121 nze124 nze 120
     
  3. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    а ничего специально не надо делать. да, в моем списке нет конкретно таких названий. это демо база со случайного места. есть другие длинные названия, типа "Ford E-350 Super Duty" или "Aston Martin Vanquish S".

    поисковому механизму глубоко всё равно: это номер кузова или это часть названия модели. можно подсунуть на вход другую вьюшку с номером мотора или размером колеса, что угодно.
     
  4. japan_parts

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

    С нами с:
    28 сен 2013
    Сообщения:
    39
    Симпатии:
    0
    что значит разделить на два поля?
    получается будет два запроса. а мне пришла мысль тоже на два запроса, когда два слова в поиске, брать каждое и проверять если оно в базе если есть делать второй запрос на остаток, как думаете получится?

    Добавлено спустя 4 минуты 39 секунд:
    простите, а для чего столько не понятных манипуляций????
     
  5. igordata

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

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

    это удобно, ящитаю.
     
  6. japan_parts

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

    С нами с:
    28 сен 2013
    Сообщения:
    39
    Симпатии:
    0
    удобно то удобно, но как-то не профессионально. это нужно помнить при заполнении таблицы что поля разные имеются...
     
  7. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а, ну вам видней, что профессионально, а что нет :D

    Добавлено спустя 1 минуту 3 секунды:
    ладно, шучу.
    ваше беспокойство понятно, но безосновательно. Один раз пропишете в коде - и зашибись.
    Профессионально по-пацански можно триггер внутри БД замутить, но это же как раз за гранью.
     
  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
    так сделал, посмотрите правильно?

    Код (Text):
    1. $mas=explode(" ",$query);
    2.    
    3. $base= "SELECT substitute, keys_word FROM keys_words WHERE keys_word LIKE '%".$mas[0]."%'";
    4. $res = mysql_query($base);
    5.  
    6. if(mysql_num_rows($res)>0 && $mas[1]!=false)
    7. {
    8. $base="SELECT substitute, keys_word FROM keys_words WHERE keys_word LIKE '%".$mas[1]."%'";
    9. $res = mysql_query($base);
    10. }
    11.  
    12. while($str = mysql_fetch_array($res))
    13. {
    14.  
    15. $array[]= $str[substitute];
    16. }
     
  11. igordata

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

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

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

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

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    даже не смешно =)

    вы можете по-строчно прокомментировать ваш скрипт?
    что по-вашему вы получаете в while($str = mysql_fetch_array($res))?
     
  14. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Я имею ввиду составить сложный запрос при сравнении и выборке в условии брать только первую букву и сравнить с тем, что ищем по первым буквам, также выбирая первую букву каждого слова сравнивая его первую букву предварительно записывая их в коллекцию найденных по первой букве и выводя их в список.
     
  15. japan_parts

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

    С нами с:
    28 сен 2013
    Сообщения:
    39
    Симпатии:
    0
    очевидно получаю данные из базы и циклом их вывожу, разве нет? это конструкция из книги, я ничего сам не придумывал

    Добавлено спустя 16 минут 41 секунду:
    не очень понятно, что вы хотели предложить
     
  16. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    А вы внимательно прочитайте еще разочек и поймете.
     
  17. japan_parts

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

    С нами с:
    28 сен 2013
    Сообщения:
    39
    Симпатии:
    0
    Прочитал 20 раз и ничего не понял...
     
  18. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ты делаешь два запроса. сначала по первому слову. потом по второму. отдельно.
     
  19. japan_parts

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

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

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    разговор пошел по кругу =)
     
  21. japan_parts

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

    С нами с:
    28 сен 2013
    Сообщения:
    39
    Симпатии:
    0
    всем спасибо. форум ни очем. удалите тему
     
  22. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Да, это форум виноват, что ты не понимаешь ничерта =) злой форум.

    однако я тебе рекомендую перечитать топик, т.к. ты продвинулся в данном вопросе, и ты можешь иначе воспринять то, что было написано на первой странице. например мою рекомендацию сделать еще одно поле в таблице с двумя словами: производитель, модель. Это бы тебе помогло.
     
  23. japan_parts

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

    С нами с:
    28 сен 2013
    Сообщения:
    39
    Симпатии:
    0
    действительно создание второго поля решило проблему. вот что получилось, прокомментируйте пожалуйста

    Код (PHP):
    1. <?php
    2.  
    3. $mas = explode(" ", $query);
    4. $array = array();
    5. $key1 = "LIKE '%" . $mas[0] . "%'";
    6. $key2 = $key1;
    7.  
    8. for ($i = 0; $i < count($mas); $i++) {
    9.   $base = "SELECT substitute, avatar, keys_word FROM keys_words WHERE keys_word " . $key1 . "";
    10.   $res = mysql_query($base);
    11.   if (mysql_num_rows($res) && !$mas[$i + 1]) {
    12.     break;
    13.   }
    14.   if (mysql_num_rows($res) && $mas[$i + 1]) {
    15.     $key1 .=" AND keys_word LIKE'%" . $mas[$i + 1] . "%'";
    16.   } else {
    17.  
    18.     for ($i = 0; $i < count($mas); $i++) {
    19.       $base = "SELECT substitute, avatar, keys_word FROM keys_words WHERE substitute " . $key2 . "";
    20.       $res = mysql_query($base);
    21.       if (mysql_num_rows($res) > 0 && $mas[$i + 1]) {
    22.         $array[0] = array('name' => "ident");
    23.         $key2 .=" AND substitute LIKE'%" . $mas[$i + 1] . "%'";
    24.       }
    25.     }
    26.   }
    27. }
    28. while ($str = mysql_fetch_array($res)) {
    29.   $array[] = array('name' => "$str[substitute]", 'avatar' => "$str[avatar]");
    30. }
    31. $str = json_encode($array);
    32. echo($str); 
     
  24. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ой, что-то сложновато и цикл в цикле. я ща плохо соображаю. Оно поставленную задачу решает?

    я опишу как на мой взгляд стоит поступить

    во-первых, искать надо по второму полю содержащему производителя и модель.
    искать надо $query% потому что почитай что такое процент в запросе, и не нужны тебе %запрос% конструкции, а нужны запрос%

    Во вторых, выбирать надо DISTINCT. А я бы вообще завел отдельные таблицы для производителей и моделей.
    После того, как подсунуты уникальные варианты человеку, надо только тогда уже искать по записям с остальными словами.
     
  25. japan_parts

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

    С нами с:
    28 сен 2013
    Сообщения:
    39
    Симпатии:
    0
    решать то решает, а вот то что сложновато согласен...
    я и так ищу сначало по производителю, если там нет совпадений, значит введена в поле модель

    [​IMG]