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

0

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

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

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

  • 0
    Каким образом это не сработало?
  • 0
    Не дай мне результат
Показать ещё 4 комментария
Теги:
mysqli

3 ответа

0
Лучший ответ

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

Вместо этого вы должны взорвать строку в массив и затем выполнить поиск. Задайте значение $tagseparator как разделитель тегов в db.

<?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
    все получилось, я очень хотел проверить построчно. большое спасибо
  • 0
    Используйте второй цикл внизу для построчно.
Показать ещё 1 комментарий
0

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

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

?

  • 0
    Я тоже это пробовал, но не получилось.
-1

У меня есть решение без использования цикла 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
    Я собираюсь проверить здесь, большое спасибо за помощь
  • 0
    Это требует от пользователя загрузить всю таблицу в память с помощью fetch_all() до вызова функции фильтра, которую вы еще не fetch_all() . Кроме того, array_filter() фактически является циклом for, поэтому вы не добьетесь экономии вычислительных array_filter() , в то же время значительно array_filter() стоимость дополнительной памяти.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню