Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.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/PHP:Concat返回左JOIN上的多个字段_Php_Mysql_Join - Fatal编程技术网

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可能有多个文件扩展名。看起来可能需要一个子查询,如本答案所示