Php 标签系统问题-重复图像
我有一个漫画网站,并实施了类似StackOverflow的标签系统 我想通过引入一个SO风格的标签系统给用户提供更多的排序选项-每个用户可以选择并删除1个或多个标签。。。每个漫画id与一个或多个标记关联 目标是:Php 标签系统问题-重复图像,php,mysql,Php,Mysql,我有一个漫画网站,并实施了类似StackOverflow的标签系统 我想通过引入一个SO风格的标签系统给用户提供更多的排序选项-每个用户可以选择并删除1个或多个标签。。。每个漫画id与一个或多个标记关联 目标是: 如果未选择任何类别和标签,功能将显示所有漫画 如果选择了类别x,则将仅显示该类别的漫画 如果选择了类别x和标记x,将显示类别x和标记x中的所有漫画 如果未选择任何类别,但选择了标记x、y、z,则功能将仅显示与这些标记关联的漫画 我使用关系表来检查是否有与所选标记ID匹配的imgid
- 如果未选择任何类别和标签,功能将显示所有漫画
- 如果选择了类别x,则将仅显示该类别的漫画
- 如果选择了类别x和标记x,将显示类别x和标记x中的所有漫画
- 如果未选择任何类别,但选择了标记x、y、z,则功能将仅显示与这些标记关联的漫画
$sql =
"SELECT tbl.*, t.*
FROM $table tbl
LEFT JOIN $assocTable a ON (tbl.id = a.imgID)
LEFT JOIN $tagsTable t ON (t.tagid = a.tagID)
WHERE ";
$sql .= !empty($_SESSION[$sessiontagIDs]) ? "a.tagID IN (" . implode(', ', $_SESSION[$sessiontagIDs]). ") " : "1 = 1";
$sql .= $catquery ." " . $order;
不幸的是,这意味着漫画现在在查询中显示了两次:
$sql =
"SELECT tbl.*, t.*
FROM $table tbl
LEFT JOIN $assocTable a ON (tbl.id = a.imgID)
LEFT JOIN $tagsTable t ON (t.tagid = a.tagID)
WHERE ";
$sql .= !empty($_SESSION[$sessiontagIDs]) ? "a.tagID IN (" . implode(', ', $_SESSION[$sessiontagIDs]). ") " : "1 = 1";
$sql .= $catquery ." " . $order;
我的表或查询设置是否不正确
谢谢大家! 问题是,您正在为它匹配的每个标记获取漫画。也许您希望查询得到:
select distinct tbl.*
. . .
或者,如果同时需要标记,请使用group\u concat()
将它们放入列表中:
select tbl.*, group_concat(t.tagname)
. . .
group by tbl.id
谢谢你的想法,戈登<代码>组_concat(t.tagname)一次只返回一个图像,即使选择了许多或所有标记。你说的“如果我同时想要这些标签”是什么意思
distinct-tbl.*
似乎很好:)您能解释一下为什么这样做吗?在原始查询中,您在select
语句中包含了标记。对于具有多个标记的图像,将存在重复的标记。通过从选择
行中删除标记,独立
可以删除重复项。+1用于使用图形明确问题