Php 在多个查询中显示非重复项

Php 在多个查询中显示非重复项,php,mysql,Php,Mysql,我的桌子结构是这样的 ID-主索引,AI 标题-产品或任何项目的标题 标签-这将有关于产品或项目的标签。用逗号分隔。例如,如果产品是Android手机,则标签可能是Android、Mobile、[品牌]、[操作系统] 现在我想分组展示产品。像第一次一样,我将显示一个带有手机类别的框。下一个盒子是安卓手机或任何特定品牌的手机 我用这个逻辑查询数据库 SELECT * FROM `database`.`tablename` WHERE `tag` LIKE '%Mobile%' 因此,这将返回一般

我的桌子结构是这样的

  • ID-主索引,AI
  • 标题-产品或任何项目的标题
  • 标签-这将有关于产品或项目的标签。用逗号分隔。例如,如果产品是Android手机,则标签可能是Android、Mobile、[品牌]、[操作系统]
  • 现在我想分组展示产品。像第一次一样,我将显示一个带有手机类别的框。下一个盒子是安卓手机或任何特定品牌的手机

    我用这个逻辑查询数据库

    SELECT * FROM `database`.`tablename` WHERE `tag` LIKE '%Mobile%'
    
    因此,这将返回一般的手机

    现在再次

    SELECT * FROM `database`.`tablename` WHERE `tag` LIKE '%Samsung%'
    
    此查询用于按三星品牌分类

    现在问题的定义是,我需要忽略以前在查询中显示的结果。我的意思是,当我查询三星品牌时,第一次查询中显示的手机型号不得显示。由于查询是单独运行的,我不知道如何才能做到这一点。有什么想法吗?

    试试这个:

    SELECT * FROM `database`.`tablename` WHERE `tag` LIKE '%Samsung%' AND `tag` NOT LIKE '%Mobile%'
    
    或者你可以试试这样:

     SELECT * FROM `database`.`tablename` GROUP BY tag
    

    然后用PHP对标签排序,你可以用减号得到这个结果。不幸的是,我们在Mysql上没有此功能,但您可以使用以下功能:

    SELECT DISTINCT `tag`
    FROM `database`.`tablename` a LEFT JOIN `database`.`tablename` b USING (`tag`)
    WHERE `tag` IS NULL
    
    你可以

    SELECT *
    FROM `database`.`tablename`
    WHERE `tag` LIKE '%Samsung%'
    AND `ID` NOT IN (SELECT `ID`
                     FROM `database`.`tablename`
                     WHERE `tag` LIKE '%Mobile%')
    
    或者只是

    SELECT *
    FROM `database`.`tablename`
    WHERE `tag` LIKE '%Samsung%'
    AND `tag` NOT LIKE '%Mobile%'
    

    但请注意,您的数据没有标准化(具体是
    标记
    列)。查看和。

    我无法使用此选项,因为页面中显示的组数将以n个数字表示,并且每个查询都将动态进行。