За последние 24 часа нас посетили 19232 программиста и 1608 роботов. Сейчас ищут 835 программистов ...

подстановка нескольких значений в IN из одной переменной

Тема в разделе "MySQL", создана пользователем Php_, 12 авг 2013.

  1. Php_

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

    С нами с:
    22 мар 2012
    Сообщения:
    17
    Симпатии:
    0
    Добрый день уважаемые форумчане, глупый и наверное дилетантский вопрос но не могу никак найти внятного решения буду очень признателен за подсказки или направление в нужное русло в какую сторону двигаться. Вопрос такой есть хранимая процедуа на сервере MySQL с одним входящим параметром строковго типа variable

    SELECT * FROM table
    WHERE idtable IN (variable)

    и при вызове процедуры с одним значением все работает хорошо, но если вызвать процедуру с двумя значениями через запятую нн работает, собственно проблема в том что заранее не известно сколько будет значений подставляться в IN, как возможно решить эту проблему, может стоит написать функцию которая будет дробить входящую строку на несколько значений по разделителю или это можно сделать по другому. Заранее спасибо за советы
     
  2. Php_

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

    С нами с:
    22 мар 2012
    Сообщения:
    17
    Симпатии:
    0
    настолько "глупый" вопрос или "тупиковый" вариант выборки с большим количеством условий?
     
  3. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Думаю, подстановка строки с запятыми не прокатит по-любому, т.к. переменная и будет восприниматься как строка IN ("1,2,3"). Даже интересно стало, тоже поищу возможности.

    В SQL это решается разными способами http://www.sql.ru/articles/mssql/03060701arraysandlistsinsqlserver.shtml#introduction
    Надо попробовать в MySQL.

    А какое макс. количество параметров ожидается?
     
  4. Php_

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

    С нами с:
    22 мар 2012
    Сообщения:
    17
    Симпатии:
    0
    Огромное спасибо за ссылку и за помощь Вы всегда отвечаете и помогаете интересными решениями. Параметров примерно 250 (на данный момент максимальное значение). На данный момент вынес запрос из хранимой процедуры в код, где склеиваю строку перед запросом, но думаю это не есть гуд поэтому продолжаю искать решение.
     
  5. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Да, 250 - это многовато. Просто мысль была передавать сразу максимальное количество параметров. Если значения нет, то NULL.

    У вас простая процедура, профита от переноса в MySQL не будет. И защита не нужна от инъекций, т.к. передаются ID-шники. Так что всё верно, собирайте строку запроса в PHP. (Правда, всё равно нужно удостовериться, что в список ID-шников не могут просочиться строки из какой-нибудь формы.)
     
  6. Php_

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

    С нами с:
    22 мар 2012
    Сообщения:
    17
    Симпатии:
    0
    спасибо)