Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 标签系统问题-重复图像_Php_Mysql - Fatal编程技术网

Php 标签系统问题-重复图像

Php 标签系统问题-重复图像,php,mysql,Php,Mysql,我有一个漫画网站,并实施了类似StackOverflow的标签系统 我想通过引入一个SO风格的标签系统给用户提供更多的排序选项-每个用户可以选择并删除1个或多个标签。。。每个漫画id与一个或多个标记关联 目标是: 如果未选择任何类别和标签,功能将显示所有漫画 如果选择了类别x,则将仅显示该类别的漫画 如果选择了类别x和标记x,将显示类别x和标记x中的所有漫画 如果未选择任何类别,但选择了标记x、y、z,则功能将仅显示与这些标记关联的漫画 我使用关系表来检查是否有与所选标记ID匹配的imgid

我有一个漫画网站,并实施了类似StackOverflow的标签系统

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

目标是:

  • 如果未选择任何类别和标签,功能将显示所有漫画
  • 如果选择了类别x,则将仅显示该类别的漫画
  • 如果选择了类别x和标记x,将显示类别x和标记x中的所有漫画
  • 如果未选择任何类别,但选择了标记x、y、z,则功能将仅显示与这些标记关联的漫画
我使用关系表来检查是否有与所选标记ID匹配的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;
不幸的是,这意味着漫画现在在查询中显示了两次:

    $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用于使用图形明确问题