在多个查询上显示非重复项

时间:2013-10-14 14:25:47

标签: php mysql

我的表结构如下所示,

  1. ID - 主要索引,AI。
  2. 标题 - 产品或任何项目的标题。
  3. 标签 - 这将包含有关产品或商品的标签。用逗号分隔。例如,如果产品是Android Mobile,则标签可能是Android,移动,[品牌],[操作系统]。
  4. 现在我想分组展示产品。首先,我将展示一个类别为手机的盒子。还有Android手机或任何特定品牌手机的下一个盒子。

    我使用这个逻辑查询数据库,

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

    这样一般会回归手机。

    现在再次

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

    此查询适用于品牌三星的整理。

    现在问题定义是我需要省略先前在上一个查询中显示的结果。我的意思是当我查询品牌三星时,不能显示第一个查询中显示的移动模型。由于查询单独运行,我不知道如何执行此操作。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

试试这个:

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

或者您可以尝试这样的事情:

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

使用PHP对标签进行排序

答案 1 :(得分:0)

您可以使用MINUS获得此结果。不幸的是我们在Mysql上没有它,但您可以使用以下内容:

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

答案 2 :(得分:0)

你可以做到

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%'

但请注意您的数据未规范化(具体为tag列)。请查看Third normal formBoyce–Codd normal form