【问题标题】:Check if row contains a substring from a string检查行是否包含字符串中的子字符串
【发布时间】:2018-02-07 10:15:16
【问题描述】:

我想检查表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 检查一行是否包含来自字符串 (2242 2260 2280 22110) 的子字符串 (2280)?

注意:这个问题可能看起来类似于SELECT MySQL field that contains a substring,但这不是因为另一个问题只是检查字符串是否包含子字符串,但在这里我试图做相反的事情。

更新:

@JohnWoo 的回答有效。但是对于像08022 这样的其他值存在问题,它也会返回那些不需要的行。 我想要完全匹配。

该表还可能包含以下值:

id | m2len
----+-------------------
  1 | 2280
----+-------------------
  2 | 2260 
----+------------------
  3 | 0
----+------------------
  4 | 80 
----+------------------

【问题讨论】:

  • 确切的问题是什么,您是否只需要从字符串中提取第三个值,是否要匹配所有值等?
  • 该行只包含一个值,即2280,但我必须检查的字符串有多个值2242 2260 2280 22110。现在我不能使用LIKE %'2242 2260 2280 22110'% 来查找2280
  • 似乎您想检查字符串中的每个元素。您可以使用 explode $m2len_array = explode(" ",$m2len); 将变量 $m2len 分解为 array() 在 $m2len_array 上使用 foreach 来针对每个数组元素构建查询的 where 部分。

标签: php mysql sql string


【解决方案1】:

您需要在查询中交换值和列,

$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

【讨论】:

  • 你也可以使用FIND_IN_SET
【解决方案2】:

转换这个:

"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)";

【讨论】:

    【解决方案3】:

    因为你在php中,你可以使用它,你应该注意sql注入,但这不是问题:

    $m2len = "2242 2260 2280 22110";
    $prepareM2len = "(".substring(" ",",",$m2len).")";
    $sql = "SELECT m2len FROM ssd WHER m2len in ".$prepareM2len ;
    

    【讨论】:

      【解决方案4】:

      试试这个:

      $sql = "SELECT m2len FROM ssd WHERE m2len = MID('$m2len',11,4)";
      

      我假设2280 总是在同一个位置

      【讨论】:

        猜你喜欢
        • 2011-11-09
        • 2013-05-18
        • 2021-12-20
        • 2014-12-10
        • 2014-11-22
        • 2013-02-05
        • 1970-01-01
        • 2021-12-14
        • 1970-01-01
        相关资源
        最近更新 更多