2013-11-20 165 views
0

我有一些这样的查询:只有第一个元素中搜索

SELECT * FROM `subjects` WHERE `teacher_id` IN (7, 11, 32) 

如果teacher_id有这样的价值观:

teacher_id = 7, 5, 9 

你会得到场的结果,但如果teacher_id有这个值:

teacher_id = 5, 11, 9 

它不会找到任何结果。

所以,这个查询只适用于第一个元素。

+0

teacher_id如何有3个值?你可以请你张贴样本数据表吗? –

+0

@mosty:设计糟糕的桌子,它是一个字符串字段。它需要正常化 –

+0

对于每个科目3,4位教授有权做某事。在这个数组中(我把它像VARCHAR类型)是这些教授的ID。 –

回答

2

那么,这是可以预料的。下面的两个语句功能相同:

WHERE x IN (1,2,3) 
WHERE (x = 1) OR (x = 2) OR (x = 3) 

当您的数据库字段包含文字文本1,2,则比较将是:

WHERE x = '1,2' 

并作为一个字符串比较处理。既然你已经做int = string,将字符串转换为int,这意味着,2被剥离,而你最终

WHERE x = 1 

您应该解决您的表结构和规范这一领域。有很多使用情况下,将多个值放入表中,并且您不属于这些情况之一。