1

我的表结构是这样的,

  1. ID - 主索引,AI。
  2. 标题 - 产品或任何项目的标题。
  3. 标签 - 这将包含有关产品或项目的标签。用逗号分隔。例如,如果产品是 Android 手机,则标签可能是 Android、手机、[品牌]、[操作系统]。

现在我想分组展示产品。首先,我将显示一个带有移动电话类别的框。下一个装有 Android 手机或任何特定品牌手机的盒子。

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

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

这样一来,这将返回一般的手机。

现在又

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

此查询用于按品牌三星进行排序。

现在问题定义是我需要省略之前在上一个查询中显示的结果。我的意思是当我查询三星品牌时,不能显示第一次查询中显示的手机型号。由于查询是单独运行的,我不知道该怎么做。有任何想法吗?

4

3 回答 3

0

尝试这个:

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

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

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

并用 PHP 对标签进行排序

于 2013-10-14T14:28:23.887 回答
0

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

SELECT DISTINCT `tag`
FROM `database`.`tablename` a LEFT JOIN `database`.`tablename` b USING (`tag`)
WHERE `tag` IS NULL
于 2013-10-14T14:32:32.300 回答
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具体列)。看看第三范式博伊斯-科德范式

于 2013-10-14T14:34:41.983 回答