【问题标题】:select and skip MySQL results选择并跳过 MySQL 结果
【发布时间】:2018-09-30 09:12:12
【问题描述】:

我有一个包含游戏信息的数据库。每个游戏都以 cat1、cat2、cat3 的形式分配了类别。 我的表结构

games (
    id int not null auto_increment,
    name varchar (100) not null,
    ...
    cats varchar (200) not null,
    FULLTEXT INDEX fulltext (cats)
    primary key (id)
)engine=myisam charset=utf8;

要搜索特定类别的游戏,我使用以下查询:

SELECT * FROM games WHERE MATCH(cats) AGAINST('action' IN NATURAL LANGUAGE MODE)

现在,如何显示不包含“动作”类别的游戏? 例如,我想在cats字段中显示所有不包含“action”字样的游戏。

你有什么想法吗?

【问题讨论】:

  • 我认为您需要规范化您的数据。创建另一个表game_to_cat 并将game_idcat_id 存储在那里,而不是将它们存储为逗号分隔值。

标签: mysql


【解决方案1】:

您可以使用 NOT 运算符:

SELECT *
FROM game
WHERE cat1 NOT IN ('action');

你的情况可能是这样的:

SELECT * 
FROM games 
WHERE NOT MATCH(cats) AGAINST('action' IN NATURAL LANGUAGE MODE)

文档: https://www.w3schools.com/sql/sql_and_or.asp

【讨论】:

    【解决方案2】:

    试试这个:

    SELECT * FROM games WHERE cats  NOT LIKE '%action%'
    

    当我在字段中输入多个值时,我会尝试用特殊的分隔符而不是逗号来分隔它们。

    像这样:##cat1##cat2##cat3##

    所以当我需要搜索时,我可以这样做:

    SELECT * FROM games WHERE cats LIKE '%##action##%'
    

    SELECT * FROM games WHERE cats NOT LIKE '%##action##%'
    

    但正如@Madhur Bhaiya 所难过的那样,您需要重组您的数据。 这不是最优的数据结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-31
      • 2021-11-29
      • 2011-02-27
      • 2020-11-02
      • 2012-12-22
      • 2011-02-05
      • 2023-04-11
      • 2013-11-28
      相关资源
      最近更新 更多