我有一個單詞列表表格和另一個表格,其中包含每個單詞中使用的所有字符。對於例如如果有一個單詞「測試」,那麼單詞字符表將有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」位於第二位置的詞。 但我怎麼找到「e」在第二個位置和「a」在第五個位置? 可能有幾個(最多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
+---------+
我希望列'word_char'的類型是'ENUM'。這對性能**和**存儲非常有用。 – Rudie 2011-05-07 18:00:41