选择并跳过 MySQL 结果
Posted
技术标签:
【中文标题】选择并跳过 MySQL 结果【英文标题】:select and skip MySQL results 【发布时间】: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_id
和cat_id
存储在那里,而不是将它们存储为逗号分隔值。
【参考方案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 所难过的那样,您需要重组您的数据。 这不是最优的数据结构。
【讨论】:
以上是关于选择并跳过 MySQL 结果的主要内容,如果未能解决你的问题,请参考以下文章
使用 Promise 并跳过代码时,Mocha 测试超时,为啥?