标记系统的问题 - 重复图像

时间:2013-03-04 00:16:52

标签: php mysql

我有一个漫画网站并且已经实现了类似于StackOverflow的标记系统。

我希望通过引入SO风格的标记系统为用户提供更多的排序选项 - 每个用户都可以选择并删除1个或多个标签...每个漫画ID都与1个或多个标签相关联。

目标是:

  • 如果没有选择类别和标签,功能将显示所有漫画
  • 如果选择了类别x,则仅显示该类别的漫画
  • 如果选择了类别x AND标记x,将显示类别x AND标记x
  • 中的所有漫画
  • 如果未选择任何类别,但选择了标签x,y,z,则功能将仅显示与这些标签关联的漫画

我正在使用关系表来检查所选标签是否存在匹配的imgid。

所以在数据库中,为了使图像与多个标签相关联(它应该能够),我必须再次使用不同的tagid添加相同的imgid。

enter image description here

以下是查询:

    $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;

不幸的是,这意味着漫画现在显示两次查询:

enter image description here

我是否错误地设置了表格或查询?

谢谢!

1 个答案:

答案 0 :(得分:3)

问题在于您为其匹配的每个标记获取漫画。也许你想要查询得到:

select distinct tbl.*
. . .

或者,如果您想同时使用这些代码,请使用group_concat()将其添加到列表中:

select tbl.*, group_concat(t.tagname)
. . .
group by tbl.id