Как я могу проверить, есть ли определенный «тег» в поле MySQL? - PullRequest
0 голосов
/ 10 мая 2018

Вопрос и следующее, у меня есть небольшой код, который проверяет, существует ли определенный «тег» в поле таблицы, и я попытался сделать следующее:

<?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";
    }
}
?>

но это не сработало. Я хотел бы знать, имеет ли он лучшую форму, или что-то, чтобы использовать вместо этого.

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

Похоже, что столбец tags в вашей базе данных представляет собой некий список, содержащий несколько тегов, например, 'tag1,tag2,tag3', поэтому ваше решение и решение Рода Элиаса не сработают при простом сравнении строк.

Вместо этого вы должны взорвать строку в массив и затем искать ее. Установите значение $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";
    }
}
0 голосов
/ 10 мая 2018

У меня есть решение без использования цикла 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';
}
0 голосов
/ 10 мая 2018

Почему бы вам просто не сделать:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...