За последние 24 часа нас посетили 17093 программиста и 1835 роботов. Сейчас ищут 1711 программистов ...

Prepare sql on IN(n1,n2)

Тема в разделе "PostgreSQL", создана пользователем immortal.1986, 31 янв 2017.

  1. immortal.1986

    immortal.1986 Активный пользователь

    С нами с:
    24 сен 2013
    Сообщения:
    257
    Симпатии:
    0
    Да все тоже
    вообще #%$%#%#
    ШОТО ЗАСТУПОРИЛСЯ
    Давай я коротко что хочу, а ты если надо все что надо дампы то се говори,!!!!
    Есть МЕТОД в каторый передаем 1 параметр из формы! (это число, номер камеры каторый мы ищем в поле ПОИСКА)
    там есть sql запрос
    тоесть ты в поле поиска вбиваешь НАПРИМЕР 10 .........

    PHP:
    1. $sql = "SELECT {$this->lang}_address, camera_sid FROM ctexts WHERE camera_sid = 10
    тоесть находим по базе 10 камеру!!!
    теперь нам надо УЛУЧШИТЬ ЭТОТ МЕТОД(написать новый пофиг..... я улучшаю)
    в чем суть то что я выше писал ОН ИЩЕТ ИЗ ВСЕХ СУЩЕСТВУЮЩИХ КАМЕР!!!!!!

    А НАМ НАДО что бы поиск веденной камеры производился только из ОПРЕДЕЛОННОГО НАБОРА!!!!!
    расширяю так
    ДОБОВЛЯЮ В МЕТОД ВТОРОЙ ПАРАМЕТР КАТОРЫЙ ПЕРЕДАЮ В конструкцию IN(1,2,3,4)
    НАПРИМЕР ДЕЛАЮ ЖЕСТКО ДЛЯ ТЕСТА
    PHP:
    1.  public function searchOnMap($search, $cameraTitle, $cam_list)
    2.     {
    3.             $sql = "SELECT {$this->lang}_address, camera_sid FROM ctexts WHERE camera_sid = ? AND camera_sid IN(1,2,4,5,6,7,8,9,10)";
    4. }
    ТОесть вожу например 1
    PHP:
    1.  $sql = "SELECT {$this->lang}_address, camera_sid FROM ctexts WHERE camera_sid = 1 AND camera_sid IN(1,2б3б4б5б6б7б8б9б10)";
    ищю 1 камеру из набора допустимых
    вре работает как надо
    ТОЕСТЬ ГРОБО ГОВОРЯ ТО ЧТО НУЖНО (ВООБЩЕ ОТЛИЧННО!!!!)
    теперь вместо IN(1,2,3,4,5)
    надо сделать типо такое IN($str_id)
    так вот я уже передавал туда и строку и набор строк и набор цыфр , и имплодил прямо туда и капец!!!!!!! не работает!
    понятно что надо
    ДЛЯ ТЕСТА вот МАССИВ каторый передаю в метод
    PHP:
    1. $a = array(1,2,3,4,5,6,7,8,9,10,22);
    пробавал и вот так
    PHP:
    1. $ids = implode(',', $a); $cameras = $this->cams->searchOnMap($ids);
    2. и так
    3. $a = array();
    4.                 foreach ($this->_sss as $k => $v){
    5.                     $a[] = (int)$v;
    6.                 }
    7. и так
    8. foreach ($cam_list as $k => $v) {
    9.             $str .= (int)$v. ",";
    10.         }
    11.         $sstr = substr($str, 0, -1);

    ЛЮБОЕ РЕШЕНИЕ ЧТО ТО Я СОВСЕМ!!!!!!!
     
  2. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    [​IMG]
     
    denis01 нравится это.
  3. immortal.1986

    immortal.1986 Активный пользователь

    С нами с:
    24 сен 2013
    Сообщения:
    257
    Симпатии:
    0
    ПРОСТИТЕ! я уже просто на грани нервного срыва!!!!! :(:(:(:(:(:(:(:(:(
     
  4. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @immortal.1986 какой запрос получается, если вывести текст из $sql?
     
  5. immortal.1986

    immortal.1986 Активный пользователь

    С нами с:
    24 сен 2013
    Сообщения:
    257
    Симпатии:
    0
    "SELECT ru_address, camera_sid FROM ctexts WHERE camera_sid = 1 AND camera_sid IN()";

    camera_sid = 1 (1 это значение каторое мы пишим в поле поиска)
    IN пустой
    теперь следите за моей мыслю.....
    жестко ПИШУ IN(1,2,3) - работает!
    жестко ПИШУ IN('1', '2', '3') - работает!
    жестко ПИШУ IN("1,2,3") - Не работает!

    ТОЕСТЬ ЛОГИЧНО ЕСЛИ Я ИЗМЕНЮ жестко вписаные на переменную нечего не измениться
    $some_var = "1,2,3"; - не работает ПО ИДЕИ ......проверил не работает так как это строка а в базе поля число!
    $some_var = "'1','2','3'"; - работать по идеи ДОЛЖНО но нет!!!!!!!!
    даже если я парпшу свой масив, потом каждую ячейку где лежить строка с номером камеры '10' привожу к (int) 10 все равно не работает!!!

    пробовал!!! 100 схем и так пихал и десяток переборов массива и игра с ковычками типами итд!

    $array = array(1,2,3,4,5,6,7);// такой мкассив ПРИХОДИТЬ значение это СТРОКИ! (я делал и состроками и инт.....повторюсь)
    пробовал и так .........my_method_search(param_input_field, $ids= implode(',', $array ))

    и саму строку sql конкатенировал екранировал переносил все из модели в контролер и даже на марс выносил - ХЕР не работает!!

    public function searchOnMap($search, $cameraTitle, $cam_list){
    //////
    if(is_numeric($search)) {
    $sql = "SELECT {$this->lang}_address, camera_sid FROM ctexts WHERE camera_sid = ? AND camera_sid IN(1,2,3)";//жестко работает
    $sql = "SELECT {$this->lang}_address, camera_sid FROM ctexts WHERE camera_sid = ? AND camera_sid IN(1,2,3)";// нужно так но не работает, да кстате суть выборки понятен впринцепи.... ПОДХОДИТЬ ЛЮБОЙ ВАРИАНТ ........
    $result = $this->getData($sql);
    /////

    }
    --- Добавлено ---
    2017-01-31 18:11:00 EET СООБЩЕНИЕ: Защита от наложения мультитранзакций сейчас включена .........все я пошел во все тяжкие ))))))) вот это может както влиять? ((((
    $search =1; /// ПЕРЕДАЛОСЬ!!!!!! а вот если строку в IN заменить на переменую то фиг!
    я уже от обратного и без prepare в тупую
    $sql = "SELECT *
    FROM ctexts
    WHERE camera_sid IN(1,2,3,4,5,6,7,8,9,22) AND camera_sid = $search";
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.099
    Симпатии:
    1.243
    Адрес:
    там-сям
    PHP:
    1. $values = array(1,2,3,4,5,6,7,8,9,10,22);
    2. $in_placeholders = implode(',', array_fill(0, count($values), '?'));
    3.  
    4. $sth = $dbh->prepare("SELECT * FROM ctexts WHERE camera_sid IN({$in_placeholders})");
    5. $sth->execute($values);
    --- Добавлено ---
    это ересь:
    ты пытаешся найти записи где поле одновременно равно А и Б. так не бывает. то есть бывает если А равно Б, иначе никак )))
     
    denis01 нравится это.