MySQL查询选择全部或部分搜索字符串

时间:2014-04-23 02:59:00

标签: mysql chess

我正在编写一个搜索国际象棋开放位置的脚本。

我需要构建一个查询,根据PGN中的某些PGN代码或移动进行选择。

示例:

  1. 1.e4 2. e5
  2. 1.e4 2. e5 Nc6
  3. 1.e4 2. e5 Nc6 3. Bb5
  4. 1.e4 2. e5 Nc6 3. Bb5 a6
  5. 1.e4 2. e5 Nc6 3. Bb5 a6 4. Ba4 Nf6
  6. 1.e4 2. e5 Nc6 3. Bb5 a6 4. Ba4 Nf6 5.Nc3
  7. 现在,我想做的是搜索“1.e4 2. e5 Nc6 3. Bb5 a6”并从上方获取第1-4行。

    我知道LIKE电话,但据我所知,它会选择所有这些线路。

    抱歉,我没有尝试过。我不知道可以实现这一点的MySQL功能。

    在表格中,每行中都有一个列VARCHAR(200),其中包含上面的一行。

    此外,如果有人知道MySQL dB是基于某些PGN搜索ECO代码的,请随时发布链接。

1 个答案:

答案 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)是不够的。请考虑增加它或使用文本数据类型。