Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 我需要多对多关系查询的帮助_Mysql - Fatal编程技术网

Mysql 我需要多对多关系查询的帮助

Mysql 我需要多对多关系查询的帮助,mysql,Mysql,我一直在为字典项目开发数据库。我必须用多对多关系存储单词和意思 下面我提到了我的表结构的示例。我希望表格结构是正确的,但我不知道如何在用户搜索时选择单个单词的所有含义 我还必须写一个查询来选择所有单词和同义词,这些单词和同义词都链接到一个单一的意义上。我还必须写一个查询来选择与单个单词相关的所有意义和同义词 word_table +----+------+ | id | word | +----+------+ | 1 | A | | 2 | B | | 3 |

我一直在为字典项目开发数据库。我必须用
多对多关系存储单词和意思

下面我提到了我的表结构的示例。我希望表格结构是正确的,但我不知道如何在用户搜索时选择单个单词的所有含义

我还必须写一个查询来选择所有单词和同义词,这些单词和同义词都链接到一个单一的意义上。我还必须写一个查询来选择与单个单词相关的所有意义和同义词

word_table  
+----+------+ 
| id | word | 
+----+------+ 
|  1 |  A   | 
|  2 |  B   | 
|  3 |  C   | 
+----+------+ 


meaning_table  
+----+--------+ 
| id | meaning| 
+----+--------+ 
|  1 |  X     | 
|  2 |  Y     | 
|  3 |  Z     | 
+----+--------+ 


word_meaning_table  
+---------+-----------+ 
| word_id | meaning_id| 
+---------+-----------+ 
|  1      |  1        | 
|  1      |  2        | 
|  1      |  3        | 
|  2      |  1        | 
|  2      |  3        | 
|  3      |  2        | 
|  3      |  3        | 
+---------+-----------+ 




   synonyms_table  
    +----+--------+ 
    | id | synonys| 
    +----+--------+ 
    |  1 |  aa    | 
    |  2 |  bb    | 
    |  3 |  cc    | 
    +----+--------+ 


    word_synonyms_table  
    +---------+-----------+ 
    | word_id | synonym_id| 
    +---------+-----------+ 
    |  1      |  1        | 
    |  1      |  2        | 
    |  1      |  3        | 
    +---------+-----------+ 
预期的输出应该是这样的

如果用户在word表中搜索单词“a”,则结果应为


您只需要许多连接:

SELECT w.word,m.meaning,s.synonys
FROM word_table w
INNER JOIN word_meaning_table wm
 ON(w.id = wm.word_id)
INNER JOIN meaning_table m
 ON(wm.meaning_id = m.id)
INNER JOIN word_synonyms_table ws
 ON(w.id = ws.word_id)
INNER JOIN synonyms_table s
 ON(ws.synonym_id = s.id)

让我给你介绍一下关于连接语法的所有解释。

当一个词没有同义词,只有一个意义时,内部连接不会完全忽略结果吗?我没有测试它,但可能其中一些应该是左联接。@PerlDog可能不是根据他提供的数据和输出,而是根据OP,如果是这样,并且某些表中可能缺少信息,请将这些表的联接从内部联接替换为左联接
SELECT w.word,m.meaning,s.synonys
FROM word_table w
INNER JOIN word_meaning_table wm
 ON(w.id = wm.word_id)
INNER JOIN meaning_table m
 ON(wm.meaning_id = m.id)
INNER JOIN word_synonyms_table ws
 ON(w.id = ws.word_id)
INNER JOIN synonyms_table s
 ON(ws.synonym_id = s.id)