mysql左连接重复行

mysql左连接重复行,mysql,join,Mysql,Join,我正在开发一个字典数据库,其中有4个表,设计如下 words wordid | lemma senses wordid | synsetid synsets synsetid | definition samples synsetid | sample 所以我使用下面的查询来获取所有的感官定义和样本 if(isset($searchterm)){ echo "<b>".$searchterm."</b><hr>";

我正在开发一个字典数据库,其中有4个表,设计如下

words
wordid | lemma

senses
wordid | synsetid

synsets
synsetid | definition

samples
synsetid | sample
所以我使用下面的查询来获取所有的感官定义和样本

if(isset($searchterm)){ 

            echo "<b>".$searchterm."</b><hr>"; 

            // QUERY TO FIND SENSES 
            $senses_query="SELECT   
                words.lemma,words.wordid,  
                senses.wordid,senses.synsetid, 
                synsets.synsetid, synsets.definition, 
                samples.synsetid, samples.sample 
            FROM 
                words  
            LEFT JOIN 
                senses ON words.wordid=senses.wordid 
            LEFT JOIN 
                synsets ON senses.synsetid=synsets.synsetid 
            LEFT JOIN 
                samples ON senses.synsetid=samples.synsetid 
            WHERE 
                words.lemma REGEXP '^$searchterm$'"; 

            $senses_query_result = mysql_query($senses_query) OR die("sense alamadım.<br>".mysql_error()); 
            $num=mysql_num_rows($senses_query_result); 


            while($sensesFound = mysql_fetch_array($senses_query_result )){ 

                echo "&nbsp; "     . $sensesFound['lemma'] .    ""; 
                echo "&nbsp; "     . $sensesFound['definition'] . ""; 
                echo "&nbsp; "     . $sensesFound['sample'] .     ""; 
                echo "<br>"; 

            } 

    }  
我喜欢像这样划船

definition 1 sample 1 sample 2
definition 2 sample 1 sample 2 sample 2
我尝试在select上使用group_concat,但它将所有定义的所有示例都合并到单个

是否可以使用mysql查询,还是应该使用php来处理此类工作


提前感谢

您可以使用GROUP_CONCAT,然后在php中使用列来拆分单个样本


此外,使用GROUP_CONCAT时,请确保使用示例文本中未使用的分隔符。

否,您无法从单个查询中获得所需的方式,您必须使用将所有行(在联接查询中重复)提取为单个行

使用
GROUP\u CONCAT
分隔,就像@Dan所说的那样,您可以
分解(“,”,$result)
将其放入数组中

例如:

SELECT GROUP_CONCAT(samples.sample SEPERATOR ',' ) .....
上面的查询将给出如下结果

definition 1 sample-1,sample-2
definition 2 sample-1,sample-2,sample-3
.....

您希望每个定义的所有样本(一行中)

因此,使用
GROUP\u CONCAT(samples.sample)
GROUP BY senses.wordid,senses.synsetid

(我猜
senses.wordid,senses.synsetid
是表
senses
的主键)


GROUP_CONCAT的问题是:当我使用它时,选择GROUP_CONCAT(samples.sample separator“”),它将样本(所有定义)合并到一个字符串中。但我想把定义1的样本压缩成一个字符串,定义2的样本压缩成另一个字符串,依此类推。。。但是,除了使用CONCAT,我更想知道,如果没有CONCAT,是否可以编写一个查询,从而得到我想要的结果。为什么使用正则表达式而不是像那样使用
?@ypercupe@Dan@Rakesh,我感谢大家。使用explode有助于实现我想要的结果。
definition 1 sample-1,sample-2
definition 2 sample-1,sample-2,sample-3
.....
        $senses_query="

        SELECT   
            words.lemma, words.wordid,  
            senses.wordid, senses.synsetid, 
            synsets.synsetid, synsets.definition, 
            COUNT(samples.synsetid) AS numberOfSamples
            GROUP_CONCAT(samples.sample SEPARATOR ', ') AS samples
        FROM 
            words  
        LEFT JOIN 
            senses ON words.wordid=senses.wordid 
        LEFT JOIN 
            synsets ON senses.synsetid=synsets.synsetid 
        LEFT JOIN 
            samples ON senses.synsetid=samples.synsetid 
        WHERE 
            words.lemma REGEXP '^$searchterm$'

        GROUP BY senses.wordid, senses.synsetid
        ";