我想检查表ssd
是否有一行包含值2280
(一个子字符串),但它确实存在,但问题是我只能得到一个字符串来检查哪个包含多个值,包括子串。表ssd
:
----+-------------------
id | m2len
----+-------------------
1 | 2280
----+-------------------
2 | 2260
----+------------------
查询:
$m2len = "2242 2260 2280 22110"
$sql = "SELECT m2len FROM ssd WHER m2len LIKE '%$m2len%'";
即使表ssd
的行m2len
包含值2280
,此查询也不会输出。
有没有办法检查一行是否包含来自带有MySQL的字符串(2280
)的子字符串(2242 2260 2280 22110
)?
注意:此问题可能与SELECT MySQL field that contains a substring类似,但不是因为另一个问题只是检查一个字符串是否包含子字符串但在这里我试图这样做对面。
更新:
@ JohnWoo的答案工作。但是对于0
,80
,22
这样的其他值也存在问题,它也会返回那些不需要的行。 我希望完全匹配。
该表还可能包含以下值:
id | m2len
----+-------------------
1 | 2280
----+-------------------
2 | 2260
----+------------------
3 | 0
----+------------------
4 | 80
----+------------------
答案 0 :(得分:4)
您需要在查询中交换值和列,
$m2len = "2242 2260 2280 22110"
$sql = "SELECT m2len FROM ssd WHERE '$m2len' LIKE CONCAT('%', m2len, '%')";
这是Demo
还有另一个使用[FIND_IN_SET()]的解决方案,但值必须用逗号分隔。
$m2len = "2242 2260 2280 22110";
$m2len = str_replace(" ",",",$m2len);
$sql = "SELECT m2len FROM ssd WHERE FIND_IN_SET(m2len,'$m2len')";
这是Demo。
答案 1 :(得分:1)
改变这个:
"2242 2260 2280 22110"
进入这个:
"2242, 2260, 2280, 22110"
构建您的查询。以下是过度简化的版本:
$m2len = "2242 2260 2280 22110";
$csv = str_replace(" ", ", ", $m2len);
$sql = "SELECT m2len FROM ssd WHER m2len IN ($csv)";
答案 2 :(得分:0)
正如你在php中,你可以使用它,你应该注意sql注入,但这不是问题:
$m2len = "2242 2260 2280 22110";
$prepareM2len = "(".substring(" ",",",$m2len).")";
$sql = "SELECT m2len FROM ssd WHER m2len in ".$prepareM2len ;
答案 3 :(得分:-1)
试试这个:
$sql = "SELECT m2len FROM ssd WHERE m2len = MID('$m2len',11,4)";
我假设2280
始终处于同一位置