我正在写一个脚本来搜索国际象棋的开局位置。
我需要构建一个查询,该查询将基于某些PGN代码或PGN中的移动中的移动进行选择。
例子:
1.e4 2条。e5型
1.e4 2条。e5标准6
1.e4 2条。e5 Nc6 3号。Bb5级
1.e4 2条。e5 Nc6 3号。Bb5 a6酒店
1.e4 2条。e5 Nc6 3号。Bb5 a6 4号。Ba4 Nf6标准
1.e4 2条。e5 Nc6 3号。Bb5 a6 4号。Ba4 Nf6 5.Nc3标准
现在,我想做的是在“1.e4 2”上做一个搜索。e5 Nc6 3号。Bb5 a6“,从上面取1-4排。
我知道类似的电话,但据我所知,它会选择所有这些线路。
对不起,我没有试过。我不知道什么样的MySQL功能可以做到这一点。
在表中,每行有一个VARCHAR(200)列,其中包含上面的一行。
另外,如果有人知道一个MySQL数据库是设计来搜索基于一些PGN的生态代码,请随时张贴链接。

最佳答案

假设您有一个带有字段“moves”varchar(200)的“chess”表,我将使用以下查询设置您的测试数据:

create table chess (moves varchar(200));
insert into chess values ("1.e4 2. e5");
insert into chess values ("1.e4 2. e5 Nc6");
insert into chess values ("1.e4 2. e5 Nc6 3. Bb5");
insert into chess values ("1.e4 2. e5 Nc6 3. Bb5 a6");
insert into chess values ("1.e4 2. e5 Nc6 3. Bb5 a6 4. Ba4 Nf6");
insert into chess values ("1.e4 2. e5 Nc6 3. Bb5 a6 4. Ba4 Nf6 5.Nc3");

现在尝试以下查询:
SELECT moves FROM chess
WHERE "1.e4 2. e5 Nc6 3. Bb5 a6" LIKE concat(moves, "%");

注意类似的比较如何使用左侧的常量和右侧的实际字段。
另一方面,varchar(200)是不够的。请考虑增加它或使用文本数据类型。

关于mysql - MySQL查询选择全部或部分搜索字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23233991/

10-12 07:25