2010-09-22 81 views
1

http://pastebin.ca/1946913 当我在程序中写入“IN(1,2,4,5,6,7,8,9,10)”时,我得到正确的结果,但是当我将id变量添加到“IN”,结果不正确。我在mysql上做了一个函数,但是它仍然不工作,我该怎么办?MySQL IN运算符

+1

'id'是一个string-y类型;你不能只是粘贴在那里,并期望它工作。 – NullUserException 2010-09-22 23:13:13

回答

1

字符串(广义上,变量值)不会插入语句中。 vKatID IN (id)检查vKatID是否等于列出的任何值,它们只有一个:值为id。您可以使用PREPARE and 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; 
2

你可以使用FIND_IN_SET()而不是,例如:

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

Sets有局限性 - 他们不能有超过64个成员例。

0

您的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) 

我不能帮你用声明id的语法,因为我不知道。我建议,以确保代码是很容易更新的创建与IDS只是一个表,然后改变你的存储过程说

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

希望这有助于。