如何检查mysql字段中是否有特定的“tag”?

ljsrvy3e  于 2021-06-25  发布在  Mysql
关注(0)|答案(3)|浏览(571)

关于问题和以下内容,我有一个小代码,用于检查表字段中是否存在特定的“标记”,我尝试执行以下操作:

<?php
$value = "e-sports";

$test = array();
$take = mysqli_query($conexao,"SELECT * FROM news WHERE game LIKE '%$value%' OR tags LIKE '%$value%' ");

while ($info = mysqli_fetch_array($take)) {

    $test[] = $info['tags']; 

    if (in_array($value, $test)) {
        echo "ok";
    }else{ 
        echo "not";
    }
}
?>

但这并没有成功。我想知道它是否有更好的形状,或者可以用什么来代替。

vq8itlhq

vq8itlhq1#

看起来像是 tags 数据库的列是某种包含多个标记的列表,例如。 'tag1,tag2,tag3' ,所以您的解决方案和rod elias的解决方案不能通过简单的字符串比较来实现。
相反,应该将字符串分解为一个数组,然后进行搜索。设置的值 $tagseparator 在数据库中,标签被划分成什么样。

<?php
$value = "e-sports";
$tagseparator = ",";

$test = array();
$take = mysqli_query($conexao,"SELECT * FROM news WHERE game LIKE '%$value%' OR tags LIKE '%$value%' ");

while ($info = mysqli_fetch_array($take)) {
    foreach(explode($tagseparator,$info['tags']) as $tag) {
        $test[] = $tag;
    }
}

if (in_array($value, $test)) {
    echo "ok";
} else { 
    echo "not";
}
?>

请注意,如果要逐行检查而不是在整个结果集中检查,只需将测试更改为

while ($info = mysqli_fetch_array($take)) {
    $test = explode($tagseparator,$info['tags']);
    if (in_array($value, $test)) {
        echo "ok";
    } else { 
        echo "not";
    }
}
a0zr77ik

a0zr77ik2#

我有一个不使用while循环的解决方案

$value = "e-sports";    
$test = array();
$take = mysqli_query($conexao,"SELECT * FROM news WHERE game LIKE '%$value%' OR tags LIKE '%$value%' ");
//$take = [['id'=> 1, "tags" => "e-sports", "game" => "lol"],
         //['id'=> 2, "tags" => "mobile", "game" => "lol"],
         //['id'=> 3, "tags" => "xbox", "game" => "abc"]];
$filter = array_filter( $take , function($v, $k) use ($value){
    return $v["tags"] == $value;
} , ARRAY_FILTER_USE_BOTH);
if(sizeof($filter) > 0){
    echo 'yes';
}else{
    echo 'not';
}
shyt4zoc

shyt4zoc3#

你为什么不干脆做:

if ($info['tags'] == $value) {
    echo 'ok';
} else {
    echo 'not';
}

?

相关问题