Я работаю над проектом, где проекты имеют теги, которые сохраняются как "компьютер, окна". Я бы так хотел, чтобы, если пользователь набирает "#Windows #Computer", он найдет все сообщения, у которых есть как компьютер, так и окна
Я попробовал query('SELECT * FROM posts WHERE FIND_IN_SET(:tags, tags)', array(':tags' => $query))
и я задал запрос в $query = "computer,windows";
который возвращает 0 результатов, хотя у меня есть один.
Чтобы получить его из списка хэштегов в список, я думал удалить пробелы и заменить "#" на ",", поэтому я могу иметь "компьютер, окна",
Во время поиска я нашел другие вопросы, но они, похоже, не поддерживали то, что мне нужно, так как пользователи могут вводить любое количество тегов, которые хотят, чтобы другие, казалось, хотели установить количество тегов
Сделайте это так: (я сделаю это с PDO)
// create a array of tags :
$arrayOfTags = [
'computer',
'windows',
'another',
];
$query = 'SELECT * FROM posts WHERE ';
// as much tags add ? to query
$first = true;
for($i = 0; $i < count($arrayOfTags); ++$i) {
if($first == true){
$query .= "tags LIKE ? ";
}else{
$query .= "AND tags LIKE ? ";
}
$first = false;
}
// ad '%' to the beginning and the end of each tag name
$arrayOfTags = array_map(function($value){
return '%'.$value.'%';
} , $arrayOfTags);
// prepare and execute the query
$stmt = $conn->prepare($query );
$stmt->execute($arrayOfTags);
//fetch the result
Обозначение кода:
DB::query('SELECT * FROM posts WHERE FIND_IN_SET(:tags , tags) AND FIND_IN_SET(:tag2 , tags)', array(':tags' => 'windows', ':tag2' => 'computer'))
но я не знаю, как заставить его поддерживать столько тегов, сколько они набирают
FIND_IN_SET(:tag2 , tags)
столько же, сколько тегов?
FIND_IN_SET
для каждого поискового запроса.