【问题标题】:Check if comma separated value exists in Database with PHP使用 PHP 检查数据库中是否存在逗号分隔值
【发布时间】:2015-09-22 06:15:39
【问题描述】:

我需要检查我的逗号分隔值是否存在于数据库中。而且我的数据库也以逗号分隔。

我的字符串在数据库中保存为“1,2,3,4,5”。

我的搜索字符串是 $bloggerscat = "2,5"

我试过了

(B.category_id LIKE ('%,$bloggerscat') OR B.category_id LIKE ('%$bloggerscat,%') OR B.category_id = '".$bloggerscat."')

没有得到正确的结果。请帮帮我。

高级感谢...

【问题讨论】:

  • 准备收到很多人说在数据库中存储逗号分隔值非常非常糟糕。
  • 您的查询不会以任何方式从您给出的字符串中为您提供 2,5.. 您的代码将类似于 (B.category_id LIKE ('%,2,5') OR B.category_id LIKE ('%2,5,%') OR B.category_id = '".2,5."') 没有任何内容与您的字符串匹配
  • 如果数据集被保存会出现在表单中,5,2
  • 我们可以通过循环检查吗?
  • 这里可能已经回答了问题:stackoverflow.com/questions/32372902/…

标签: php mysql


【解决方案1】:

你可以这样做,

$bloggerscat = '2,5'; // Your input here (string)

$set = explode(',',$bloggerscat); // get the numbers in $set array

$query = 'SELECT * FROM `table` WHERE '; // construct query

foreach ($set as $search)
{
    $query .= "FIND_IN_SET($search, column_name) OR "; // append every time for set 
}

$query = rtrim($query, ' OR'); // remove last OR

echo $query; // test

会产生

SELECT * FROM `table` WHERE FIND_IN_SET(2, column_name) OR FIND_IN_SET(5, column_name)

将为您提供来自column_name 列的结果,其中逗号分隔的集合具有25 的值。

【讨论】:

  • 感谢 Viral 的解决方案。
【解决方案2】:

您必须在数据库中将字符串存储为“,1,2,3,4,5” 然后试试这段代码

$currStr        =   "2,5";
$explCurrStr    =   explode(",",$currStr);
foreach($explCurrStr as $key=>$all){
    if($key==0){
        $sql.=" B.category_id LIKE ('%,".$all.",')  ";
    }else{
        $sql.=" OR B.category_id LIKE ('%,".$all.",')  ";
    }
}

【讨论】:

    猜你喜欢
    • 2021-08-04
    • 2012-11-12
    • 2011-11-30
    • 2018-03-11
    • 2022-06-10
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多