Mysql 如何使用GROUP_CONCAT加入群后?

Mysql 如何使用GROUP_CONCAT加入群后?,mysql,sql,join,group-by,Mysql,Sql,Join,Group By,我有两张桌子 CREATE TABLE texts ( TextID int(11) unsigned, SentenceID int(11) unsigned, Phrase tinyint(3) unsigned, Word varchar(255), PRIMARY KEY(TextID,SentenceID) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci CREATE TABLE phrases (

我有两张桌子

CREATE TABLE texts
(
TextID int(11) unsigned,
SentenceID int(11) unsigned,
Phrase tinyint(3) unsigned,
Word varchar(255),
PRIMARY KEY(TextID,SentenceID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci

CREATE TABLE phrases
(
PhraseID int(11) unsigned NOT NULL AUTO_INCREMENT,
Phrase varchar(255),
PRIMARY KEY(PhraseID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci
我通过
分组方式从文本表中获取短语

SELECT TRIM(GROUP_CONCAT(Word SEPARATOR ' '))  AS GroupedPhrase
FROM texts 
WHERE Phrase IS NOT NULL GROUP BY TextID,SentenceID,Phrase
但是我需要
连接
两个表以获得
短语ID
,而不是
短语
,一个查询来完成此操作:

SELECT a.TextID,a.SentenceID,b.PhraseID 
FROM texts a JOIN phrases b ON TRIM(GROUP_CONCAT(a.Word SEPARATOR ' '))=b.Phrase 
WHERE a.Phrase IS NOT NULL GROUP BY a.TextID,a.SentenceID,a.Phrase
使用子查询:

SELECT *
FROM (SELECT TextID,SentenceID,TRIM(GROUP_CONCAT(Word SEPARATOR ' '))  AS GroupedPhrase
     FROM texts 
     WHERE Phrase IS NOT NULL 
     GROUP BY TextID,SentenceID,Phrase) sub
JOIN phrases b ON sub.GroupedPhrase=b.Phrase
GROUP_CONCAT()
不保证值的顺序,除非您使用
ORDER BY
。如果要匹配单词,则应使用排序依据

不幸的是,您的句子没有一个明显的列用于排序。事实上,您的数据模型非常奇怪

我可能猜您打算将
短语
用于此目的:

SELECT tsp.*, p.PhraseId
FROM (SELECT TextID, SentenceID,
             GROUP_CONCAT(Word ORDER BY phrase SEPARATOR ' '))  AS GroupedPhrase
      FROM texts 
      WHERE Phrase IS NOT NULL 
      GROUP BY TextID, SentenceID
     ) tsp JOIN
     phrases p
     ON tsp.GroupedPhrase = p.Phrase;

如果您没有这样的列,您应该将其添加进去。

可能您的模式需要修改。
短语tinyint(3)unsigned
用于什么?连接大的varchar字符串不会有效。@MadhurBhaiya我应该修改命名,
短语tinyint(3)unsigned
是每个
语句ID
中的
短语编号。我不理解数据结构。您已将
textid
/
sentenceid
定义为主键。例如,不需要通过
分组添加
短语
。事实上,根本不需要按两列进行聚合;我觉得您应该只在文本表中存储短语id。您是对的,
短语
,应该命名为
短语编号
排序依据
的列。谢谢你的提示。