mysql左连接重复行
我正在开发一个字典数据库,其中有4个表,设计如下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>";
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 " " . $sensesFound['lemma'] . "";
echo " " . $sensesFound['definition'] . "";
echo " " . $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
";