За последние 24 часа нас посетили 22418 программистов и 1637 роботов. Сейчас ищут 948 программистов ...

Создание поиска на сайте используя PDO

Тема в разделе "Прочие вопросы по PHP", создана пользователем vayas, 14 дек 2012.

  1. vayas

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

    С нами с:
    13 дек 2012
    Сообщения:
    167
    Симпатии:
    9
    Адрес:
    Пермь
    Всех приветствую. Прошу помощи в создании поиска на сайте есть некая таблица с объектами недвижимости
    И форма поиска содержащая в себе множество чекбоксов и полей, некоторые чекбоксы относятся к определенной группе например ГОРОД. Запрос примерно следующий
    Код (Text):
    1.  
    2. SELECT id, city_id, area, city FROM an_objects  
    3.                 WHERE livedays > 0 AND type_id = :typeoffer AND rubric_id = :typerelaty
    4.                 AND CASE
    5.                     WHEN :1r = '' THEN true
    6.                     ELSE city_id IN (:1r, :2r, :99r, :100r)
    7.                 END
    8.                 GROUP BY id ORDER BY date ASC
    Т.е в первом примере нужно будет заполнять четыре параметра, или например сто в зависимости сколько пользователь выберит чеков. А хотелось бы сделать вот так
    Код (Text):
    1. SELECT id, city_id, area, city FROM an_objects  
    2.                 WHERE livedays > 0 AND type_id = :typeoffer AND rubric_id = :typerelaty
    3.                 AND CASE
    4.                     WHEN :1r = '' THEN true
    5.                     ELSE city_id IN (:arrCity)
    6.                 END
    7.                 GROUP BY id ORDER BY date ASC
    Саму строку формирую следующим образом
    Код (Text):
    1.  
    2. if(isset($param['city']))
    3.     {
    4.         for($i=0; $i < 9; $i++)
    5.         {
    6.             if(isset($param['city'][$i]))
    7.                 $raion .= $param['city'][$i] . ",";
    8.             else
    9.                 break;
    10.         }
    11.         $arrCity = substr($city, 0, -1);        
    12.     }
    Но получается примерно следующее
    :)arrCity) подставляется ("1,2,3,4,5,6") и т.д. Это получается как одна строка, но как сделать следующим образом
    :)arrCity) (1,2,3,4,5,6)
     
  2. vayas

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

    С нами с:
    13 дек 2012
    Сообщения:
    167
    Симпатии:
    9
    Адрес:
    Пермь
    Вообщем единственный вариант который пока что удалось получить это подготовленное выражение.
    Пример типо такого
    Код (Text):
    1.  
    2. private function PDOBindArray(&$poStatement, &$paArray){
    3.     foreach ($paArray as $k=>$v) {
    4.         $poStatement->bindValue($k, $v);
    5.     }      
    6. }
     
  3. Verbal

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

    С нами с:
    17 дек 2011
    Сообщения:
    207
    Симпатии:
    0
  4. plord

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

    С нами с:
    16 янв 2013
    Сообщения:
    24
    Симпатии:
    0
    Sphinx. Ваша БД с такими запросами навернется от ужаса еще раньше, чем ваш сайт наберет мало-мальски заметную аудиторию. Так что даже думать забудьте о подобной ереси. Запросы в БД только по первичному ключу. Да и те - кешировать.
     
  5. vayas

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

    С нами с:
    13 дек 2012
    Сообщения:
    167
    Симпатии:
    9
    Адрес:
    Пермь
    Как же это реализовать если мне к примеру нужно найти город и пользователь будет напишет "МОСКВА", как мне сделать выборку по первичному ключу?
     
  6. plord

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

    С нами с:
    16 янв 2013
    Сообщения:
    24
    Симпатии:
    0
    Sphinx отдаст набор первичных ключей для выборки.
     
  7. vayas

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

    С нами с:
    13 дек 2012
    Сообщения:
    167
    Симпатии:
    9
    Адрес:
    Пермь
    Вы используюете Sphinx, я про него читал немного, но вот разворачивать у себя ещё не пробовал?
     
  8. plord

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

    С нами с:
    16 янв 2013
    Сообщения:
    24
    Симпатии:
    0
    Использовал на реальных проектах, один из коих лидер рынка недвижимости С-Пб, кстати. Сейчас использую более подходящее для неструктурированных данных решение, но т.к. у вас БД, что Sphinx будет более в тему.