1

有人可以给我一个查询,结果将返回第 1 行和第 3 行吗?

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

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

4

6 回答 6

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

FIND_IN_SET的文档

于 2010-04-16T14:08:08.727 回答
1

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

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

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

这不会得到 40、14 等内容,但您需要确保 Hidden 字段中没有空格(例如,1, 4, 5或相应地更新 concat 和 LIKE 函数。

于 2010-04-16T14:11:32.120 回答
0
SELECT * FROM table WHERE Hidden LIKE '%4%'

% 是通配符。

于 2010-04-16T14:02:18.490 回答
0

只要您使用正确的分词符,全文搜索可能是一个合理的解决方案。

于 2010-04-16T14:06:20.700 回答
0

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

将隐藏值旋转到一个单独的表中,并带有当前行的 ID。

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

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

然后,您可以针对此分拆表返回结果。

于 2010-04-16T14:10:09.203 回答
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
于 2010-04-16T14:33:06.510 回答