Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Всем здравствуйте!
Есть следующая задачка - нужно в конструкции in() селекта подзапроса использовать значение поля, представленного в виде перечня неких чисел. А поскольку в in() нужно перечислить через запятую значения или воспользоваться подзапросом, - то мне нужно каким то образом преобразовать значение поля вида ("111,222,333") в in(111, 222, 333) или in(... таблица-последовательность этих чисел ...)
Мой упрощенный запрос
Неактивен
в mysql нет оператора result
раз у вас есть процедура, разбивающая строку по разделителю, то сделайте её в виде функции (create function ..) которая будет проводить сравнение с кодом товара и возвращать 0 или 1
...
and "ттп"."тип товара" <> "запчасть"
and ваша_функция("ттп"."код товара", "ттз"."перечень кодов товаров");
Неактивен
Строку превратить в аргумент IN можно сформировав запрос из строки с помощью PREPARE
Неактивен
rgbeast написал:
Строку превратить в аргумент IN можно сформировав запрос из строки с помощью PREPARE
Пожалуйста, здесь поподробнее )))
Неактивен
rgbeast написал:
Строку превратить в аргумент IN можно сформировав запрос из строки с помощью PREPARE
Пока мое предположение, конечно - не уверен можно ли так. Например, - превратить строку "111,222,333" в строку вида ":id111,:id222,:id333", и подставить ее в in(). Не это ли, rgbeast, имеете в виду?
Неактивен
По PREPARE имел в виду то, что строку можно сделать частью запроса по следующей схеме:
http://webew.ru/articles/178.webew
Неактивен
rgbeast написал:
По PREPARE имел в виду то, что строку можно сделать частью запроса по следующей схеме:
http://webew.ru/articles/178.webew
Либо я что-то недопонял, либо одно из двух - но я в статье не нашел как с помощью PREPARE можно сделать строку аргументом IN() ...
Неактивен
Предположим, в хранимой процедуре я всеже буду удалять и создавать временную таблицу, в которую буду инсертить 111, 222, 333. Тогда мне непонятно, как или где в селекте вызывать данную процедуру так, чтобы в in(я мог написать так: select part from temp_table).
Копия селекта из первого поста
Неактивен
А существующая функция FIND_IN_SET не подойдет для задачи?
Пример:
Отредактированно klow (20.01.2016 13:11:54)
Неактивен
bannndi написал:
rgbeast написал:
По PREPARE имел в виду то, что строку можно сделать частью запроса по следующей схеме:
http://webew.ru/articles/178.webewЛибо я что-то недопонял, либо одно из двух - но я в статье не нашел как с помощью PREPARE можно сделать строку аргументом IN() ...
Неактивен
klow написал:
А существующая функция FIND_IN_SET не подойдет для задачи?
Пример:... and FIND_IN_SET("ттп"."код товара", "111,222,333")>0
Очень даже подойдет! Спасибо большущее, klow! Плюсанул бы, если бы был доступен такой функционал!
Неактивен
vasya написал:
bannndi написал:
rgbeast написал:
По PREPARE имел в виду то, что строку можно сделать частью запроса по следующей схеме:
http://webew.ru/articles/178.webewЛибо я что-то недопонял, либо одно из двух - но я в статье не нашел как с помощью PREPARE можно сделать строку аргументом IN() ...
PREPARE имя_выражения FROM 'SELECT ... and `ттп`.`код товара` in (?)';
SET @var = '111,222,333';
EXECUTE имя_выражения USING @var;
vasya, ясно, спасибо, этот момент я протестировал, работает. Вопрос только в том, как использовать данную возможность в подзапросе селекта из первого поста, непосредственно в "and "ттп"."код товара" in(......) "
Сложность для меня именно в этом на данном этапе.
Неактивен
А если скорость выполнения не критична, то можно использовать временную таблицу и процедуру, работающую с этой таблицей.
Неактивен
Страниц: 1