gpt4 book ai didi

php - MySQL 在单列中使用 AND

转载 作者:行者123 更新时间:2023-11-29 18:19:55 25 4
gpt4 key购买 nike

我正在开发一个标签系统,其中查询(标签)数组,并选择“标签”列中具有相同标签的所有行。

问题是我使用了 IN 条件,它是一种 OR 函数,它选择了具有相同标签的所有行,而不是缩小它们的范围。

它不会缩小带有“太阳”和“风景”等标签的图像的范围,而是选择带有这些标签的所有图像。

我正在寻找的是 IN () 的 AND 版本或可以使用数组的替代品。

这只是一个例子。实际上,用户可以添加任意数量的标签

+----+---------+---------+
| ID | ImageID | Tag |
+----+---------+---------+
| 1 | 2 | sun |
+----+---------+---------+
| 2 | 12 |landscape|
+----+---------+---------+
| 3 | 15 | field |
+----+---------+---------+
| 4 | 15 |landscape|
+----+---------+---------+

我的代码

$tag = $_POST['tag'];
$tag = preg_split("#/#", $tag);
$tag = implode("', '", $tag);

$query = "SELECT * FROM ComicStripTags WHERE `Tag` IN ('$tag')";
$result = mysqli_query($link, $query);
while ($row = mysqli_fetch_array($result)){
$ID[] = $row['ImageID'];
}

谢谢

附注我不是在 SQL 中工作,而是在 PHP 中工作

最佳答案

您可以使用内部联接来做到这一点:

select * from TAGS a
inner join TAGS b
on a.ImageID = b.ImageID
where a.tag = 'field'
and b.tag = 'landscape'

根据您的 PHP 代码:

$joins = [];
$conditions = [];

foreach (preg_split("#/#", $_POST['tag']) as $index => $tag) {
$alias = "ComicStripTags_$index";
$joins[] = "ComicStripTags AS $alias" . ($index > 0 ? " ON ComicStripTags_0.ImageID = $alias.ImageID" : '');
$conditions[] = "$alias.Tag = '$tag'";
}

$query = sprintf("SELECT * FROM %s WHERE %s", implode(' INNER JOIN ', $joins), implode(' AND ', $conditions));

关于php - MySQL 在单列中使用 AND,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46675861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com