有一个号码

时间:2010-04-16 13:59:44

标签: mysql having

有人可以给我一个查询,该查询将返回行ID 1& 3?

ID Name Hidden 
1 Mika 1,4,2 
2 Loca 0 
3 Nosta 4 
4 Like 2 

像这样的东西 SELECT * FROM表WHERE Hidden HAVING(4)

6 个答案:

答案 0 :(得分:7)

SELECT * FROM table WHERE FIND_IN_SET('4',Hidden);

FIND_IN_SET

的文档

答案 1 :(得分:1)

SELECT * FROM table WHERE CONCAT(',',Hidden,',') LIKE '%,4,%'

或者你可以避免像这样使用LIKE

SELECT * FROM table WHERE INSTR(CONCAT(',',Hidden,','), ',4,') > 0

这不会得到像40,14等的东西,但你需要确保隐藏字段中没有空格(例如1, 4, 5或相应地更新concat和LIKE函数。

答案 2 :(得分:0)

SELECT * FROM table WHERE Hidden LIKE '%4%'

%是通配符。

答案 3 :(得分:0)

只要您使用正确的分词符,

Full Text Search可能是合理的解决方案。

答案 4 :(得分:0)

按照建议使用全文搜索,或

将隐藏值旋转到一个单独的表中,其中包含当前行的ID。

例如,Mika在此表中将有三个条目

ID = 1,隐藏= 1
ID = 1,隐藏= 4
ID = 1,隐藏= 2

然后你可以针对这个离职表返回结果。

答案 5 :(得分:0)

您可能还需要考虑规范化表并将这些“隐藏”值存储在具有适当列的索引的单独表中。根据您拥有的行数要快得多:

ID Hidden
1  1
1  4
1  2 
3  4 
4  2 

SELECT DISTINCT table.* FROM table, hidden_table WHERE table.ID = hidden_table.ID AND hidden_table.hidden = 4