我有一个名为tags的表,如下所示:

/ tags
+----+------+--------------------------------------------+
| id | name |                 explanation                |
+----+------+--------------------------------------------+
| 1  | PHP  | It is a server-side scripting language     |
| 2  | C++  | It is a middle-level programming language  |
| 3  | HTML | It is a markup language                    |
| 4  | CSS  | It is a style sheet language               |
| 5  | JS   | It is a prototype-based language           |
+----+------+--------------------------------------------+


我也有这样的字符串:

$str = "PHP , CSS";


现在,我需要检查数据库中是否同时存在PHPCSS?通常有两种情况:


True:字符串中的所有标签都存在于数据库中。
False:字符串中的一个或多个标签在数据库中不存在。




我可以爆炸该字符串并创建这些标签的数组:

$tags = trim(explode(",",$str)); // Array ( [0] => PHP [1] => CSS )


然后创建多个查询以分别检查每个查询:

$i= count($tags);
for($i; $i <= 0; $i--){
    $query .= "SELECT count(1) FROM `tags` WHERE `name` =".$tags[$i]." UNION ALL";
}
$query = rtrim($query, "UNION ALL"); // to remove last 'UNION ALL' which is redundant


但是我的方法似乎真的很慢..因为有时会有5个标签(然后有5个查询)。现在我想知道,还有什么更好的方法吗?

最佳答案

您也可以使用IN('PHP','CSS')并检查计数是否匹配。尝试-

$tags = explode(",",$str);
$tags = array_map('trim', $tags);

$query = "SELECT count(1) FROM `tags` WHERE `name` IN ('" . implode("','", $tags) . "')";


执行查询后,匹配计数。

if($countOfResult === count($tags));

关于php - 如何检查数据库中是否存在多个字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35335365/

10-12 17:04
查看更多