1

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

我想通过引入 SO 风格的标记系统为用户提供更多排序选项——每个用户可以选择和删除 1 个或多个标签……每个漫画 id 都与 1 个或多个标签相关联。

目标是:

  • 如果没有选择类别和标签,函数将显示所有漫画
  • 如果选择类别 x,将仅显示该类别的漫画
  • 如果选择类别 x 和标签 x,将显示类别 x 和标签 x 中的所有漫画
  • 如果选择了 NO 类别,但选择了标签 x、y、z,则函数将仅显示与这些标签关联的漫画

我正在使用关系表来检查是否有与所选 tagid 匹配的 imgid。

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

在此处输入图像描述

这是查询:

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

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

在此处输入图像描述

我的表或查询设置不正确吗?

谢谢!

4

1 回答 1

3

问题是您正在为它匹配的每个标签获取漫画。也许您希望查询获得:

select distinct tbl.*
. . .

或者,如果您想要同时使用标签,请使用group_concat()将它们放在列表中:

select tbl.*, group_concat(t.tagname)
. . .
group by tbl.id
于 2013-03-04T00:20:15.633 回答