MYSQL/PHP:Concat返回左JOIN上的多个字段
我有一个MYSQL/PHP:Concat返回左JOIN上的多个字段,php,mysql,join,Php,Mysql,Join,我有一个SELECT查询,其中一个LEFT JOIN可以根据需要工作。然后,我通过smilar左连接添加了一个表,现在我得到了一个wierd结果。基本上,对于一个group_concat组,我每记录得到一个项目,我得到八个记录。我不明白为什么会发生这种情况,因为到新表的连接与其他几个没有这个问题的连接(为了清楚起见,我在示例中省略了这些连接)是相似的 下面是一个很好的查询: $sql = "SELECT t.*, group_concat(tf.todoid) as `tftodoid`,
SELECT
查询,其中一个LEFT JOIN
可以根据需要工作。然后,我通过smilar左连接添加了一个表,现在我得到了一个wierd结果。基本上,对于一个group_concat
组,我每记录得到一个项目,我得到八个记录。我不明白为什么会发生这种情况,因为到新表的连接与其他几个没有这个问题的连接(为了清楚起见,我在示例中省略了这些连接)是相似的
下面是一个很好的查询:
$sql = "SELECT t.*,
group_concat(tf.todoid) as `tftodoid`,
group_concat(tf.id) as `tfid`,
group_concat(tf.filedescript) as `tffiledescript`,
group_concat(tf.filename) as `tffilename`,
group_concat(tf.founderid) as `tffounderid`,
group_concat(tf.ext) as `tfext`,
group_concat(tf.lasttouched) as `tilt`
FROM titles `t`
LEFT JOIN titlefiles `tf`
ON (tf.todoid = t.id AND tf.founderid = '$userid')
WHERE t.userid='$userid'
GROUP BY t.id";
这是一个带有额外连接的查询,它现在正在溢出项的多个副本:
$sql = "SELECT t.*,
group_concat(tf.todoid) as `tftodoid`,
group_concat(tf.id) as `tfid`,
group_concat(tf.filedescript) as `tffiledescript`,
group_concat(tf.filename) as `tffilename`,
group_concat(tf.founderid) as `tffounderid`,
group_concat(tf.ext) as `tfext`,
group_concat(tf.lasttouched) as `tilt`,
group_concat(s.id) as `stepid`,
group_concat(s.step) as `steps`
FROM titles `t`
LEFT JOIN titlefiles `tf`
ON (tf.titleid = t.id AND tf.founderid = '$userid')
LEFT JOIN steps `s`
ON s.titleid = t.id
WHERE t.userid='$userid'
GROUP BY t.id";
下面是一个JSON输出示例,显示了不同之处:
第一个问题:
"tfid":"56,57,58,59,60,61,62,63,64,65,66,67,68,75,76,81"
第二个问题:
"tfid":"56,57,58,59,60,61,62,63,64,65,66,67,68,75,76,81,56,57,58,59,60,61,62,63,64,65,66,67,68,75,76,81,56,57,58,59,60,61,62,63,64,65,66,67,68,75,76,81,56,57,58,59,60,61,62,63,64,65,66,67,68,75,76,81,56,57,58,59,60,61,62,63,64,65,66,67,68,75,76,81,56,57,58,59,60,61,62,63,64,65,66,67,68,75,76,81,56,57,58,59,60,61,62,63,64,65,66,67,68,75,76,81,56,57,58,59,60,61,62,63,64,65,66,67,68,75,76,81,56,57,58,59,60,61,62,63,64,65,66,67,68,75,76,81",
我怀疑这个问题与JOIN或GROUPBY语句有关,但我不知道如何解决
如何确保每个文件只获取一个文件ID,而不是八个文件ID?将行更改如下:
group_concat(DISTINCT tf.id) as `tfid`,
这样就只能得到唯一的ID。
如果要订购,请添加:
group_concat(DISTINCT tf.id ORDER BY tf.id ASC) as `tfid`,
这个独特的删除重复,就像你们有两个相同的号码故意吗?我发现它会删除。这将是一个很好的解决方案,除非我需要保留重复。例如,jpg可能有多个文件扩展名。看起来可能需要一个子查询,如本答案所示