以下可能吗?
DB中的字段包含:1,2,3,4
$a=1;
$selqry="select * from table where field={contains $a}";
谢谢, 乙
答案 0 :(得分:1)
MySQL的FIND_IN_SET(str,strlist) function可以帮助你(编辑:oops ....以防你使用MySQL)
如果字符串str位于由N个子字符串组成的字符串列表strlist中,则返回1到N范围内的值。字符串列表是由以“,”字符分隔的子字符串组成的字符串。
SELECT
x,y,z
FROM
tablename
WHERE
FIND_IN_SET(':id', field)
(如果你没有使用pdo/prepared statements,请将$ id替换为$ a的值,但要确保它已正确编码/转义)
虽然它不是完全索引友好的...你最终会在你的WHERE子句中使用这个函数进行全表扫描。
答案 1 :(得分:0)
当然,这是可能的。
如果您不介意"1"
匹配"2,3,11,4"
。您可以使用INSTR
或LIKE
来完成此操作。例如:
SELECT *
FROM tbl
WHERE INSTR(field, '1') != 0
如果您不希望"1"
与"2,3,11,4"
匹配,则必须使用(慢)正则表达式,如果您的DBMS支持它(例如,MySQL):
SELECT *
FROM tbl
WHERE field REGEXP '[[:<:]]1[[:>:]]'
然而,更好的问题是这是否是一个好主意。答案就是响亮的不。您不应在单个字段中存储多个值。像这样的案例真的会从normalization中受益。
答案 2 :(得分:0)
我不是100%肯定你在问什么,但为什么不做LIKE
,它也应该适用于数字领域:
SELECT * FROM foo WHERE id like '%1%';
这将匹配001
,100
和101
,010
等。
答案 3 :(得分:0)
如果字段只包含1-8的数字,则可以轻松完成
$selqry="select * from table where field like '%" . intval($a) . "%'";
你“应该”可能会将字段移动到另一个表,并使用基于id连接表的查询。