У меня есть таблица списка слов и другая таблица, в которой есть все символы, используемые в каждом слове.Например, если есть слово «тест», то таблица символов слова будет иметь 4 строки t, e, s, t.
mysql> select * from word_list;
+---------+---------+
| word_id | word |
+---------+---------+
| 1 | This |
| 2 | is |
| 3 | test |
| 4 | message |
| 5 | for |
+---------+---------+
5 rows in set (0.00 sec)
mysql> select * from word_chars;
+----+---------+----------+-----------+
| id | word_id | char_seq | word_char |
+----+---------+----------+-----------+
| 1 | 1 | 1 | T |
| 2 | 1 | 2 | h |
...
...
| 19 | 5 | 2 | o |
| 20 | 5 | 3 | r |
+----+---------+----------+-----------+
20 rows in set (0.00 sec)
Легко найти слово, где «e» находится в секундупозиция.Но как мне найти слова, где «е» находится на второй позиции , а «а» на пятой позиции ?Таких условий может быть несколько (до 8).
select word from word_list as a inner join word_chars as b on a.word_id = b.word_id
where word_char = 'e' and char_seq = '2';
+---------+
| word |
+---------+
| test |
| message |
+---------+
2 rows in set (0.00 sec)
Вот соответствующие таблицы.
drop table if exists word_list;
create table word_list (word_id int not null auto_increment, word varchar(255), primary key (word_id)) ENGINE=InnoDB;
insert into word_list (word) values ('This'), ('is'), ('test'), ('message'), ('for');
drop table if exists word_chars;
create table word_chars (id int not null auto_increment, word_id int, char_seq int, word_char varchar(50), primary key (id), unique key `word_seq` (word_id, char_seq), foreign key (word_id) references word_list(word_id)) ENGINE=InnoDB;
insert into word_chars (word_id, char_seq, word_char) values (1, 1, 'T'), (1, 2, 'h'), (1, 3, 'i'), (1, 4, 's'), (2, 1, 'i'), (2, 2, 's'), (3, 1, 't'), (3, 2, 'e'), (3, 3, 's'), (3, 4, 't'), (4, 1, 'm'), (4, 2, 'e'), (4, 3, 's'), (4, 4, 's'), (4, 5, 'a'), (4, 6, 'g'), (4, 7, 'e'), (5, 1, 'f'), (5, 2, 'o'), (5, 3, 'r')
Обновление :
Можно ли вернуть количество или максимум (char_seq) в том же запросе?Так, напримерВ следующем ответе это должно выглядеть так ...
+---------+
| word | count
+---------+
| message | 7
+---------+