我正在编写一个搜索国际象棋开放位置的脚本。
我需要构建一个查询,根据PGN中的某些PGN代码或移动进行选择。
示例:
现在,我想做的是搜索“1.e4 2. e5 Nc6 3. Bb5 a6”并从上方获取第1-4行。
我知道LIKE电话,但据我所知,它会选择所有这些线路。
抱歉,我没有尝试过。我不知道可以实现这一点的MySQL功能。
在表格中,每行中都有一个列VARCHAR(200),其中包含上面的一行。
此外,如果有人知道MySQL dB是基于某些PGN搜索ECO代码的,请随时发布链接。
答案 0 :(得分:0)
假设你有一个带有'move'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)是不够的。请考虑增加它或使用文本数据类型。