MySQL IN Оператор - PullRequest
       2

MySQL IN Оператор

1 голос
/ 23 сентября 2010

http://pastebin.ca/1946913 Когда я пишу «IN (1,2,4,5,6,7,8,9,10)» внутри процедуры, я получаю правильный результат, но когда я добавляю переменную id в «IN», результаты неверен. Я сделал функцию на MySQL, но она все еще не работает, что я могу сделать?

Ответы [ 3 ]

2 голосов
/ 23 сентября 2010

Вы можете использовать FIND_IN_SET () вместо IN, например:

SELECT COUNT(*) AS toplam
FROM videolar
WHERE vTarih = CURDATE()
AND FIND_IN_SET( vKatID, id ) > 0
AND vDurum = 1

Наборы имеют ограничения - например, они не могут иметь более 64 членов.

1 голос
/ 23 сентября 2010

Строки (в общем, значения переменных) не интерполируются в операторах. vKatID IN (id) проверяет, равно ли vKatID какому-либо из перечисленных значений, которое только одно: значение id. Вы можете создавать динамические запросы, используя PREPARE и EXECUTE для интерполяции значений:

set @query = CONCAT('SELECT COUNT(*) AS toplam
                    FROM videolar
                    WHERE vTarih = CURDATE() AND vKatID IN (', id, ') AND vDurum = 1;') 
PREPARE bugun FROM @query;
EXECUTE bugun;
0 голосов
/ 23 сентября 2010

Ваши переменные id - это строка (varchar), а не массив (кортеж в SQL), т. Е. Вы делаете это в (в Java)

String id = "1,2,3,4,5,6,7"

вы хотите

int[] ids = {1,2,3,4,5,6,7}

Так что в вашем коде

set id = (1,2,3,4,5,6,7,8,9,10)

Я не могу помочь вам с синтаксисом для объявления идентификатора, поскольку я не знаю.Я бы посоветовал убедиться в том, что код легко обновляется, создать таблицу с просто идентификаторами, а затем изменить хранимую процедуру, указав

SELECT COUNT(*) AS toplam
                        FROM videolar
                        WHERE vTarih = CURDATE() AND vKatID IN (SELECT DISTINCT id FROM idtable) AND vDurum = 1;

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...