2017-07-02 33 views
0

我有一個SELECT查詢,LEFT JOIN根據需要工作。然後我通過相似的LEFT JOIN添加了一張表,現在我得到了一個更奇怪的結果。基本上,我爲每個記錄獲得一個項目的group_concat,我得到八個記錄。我不明白爲什麼會發生這種情況,因爲到新表的連接與其他幾個沒有此問題的連接是類似的(爲了清楚起見,我已從示例中省略)。MYSQL/PHP:Concat返回到LEFT JOIN上的很多字段

這裏是一個優良的查詢:

$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或與本集團通過報表,但我看不出如何解決。

如何確保每個文件只有一個fileid而不是八個?

回答

1

改變路線如下:

group_concat(DISTINCT tf.id) as `tfid`, 

這就只有讓你的唯一的ID。 如果你希望他們訂購地址:

group_concat(DISTINCT tf.id ORDER BY tf.id ASC) as `tfid`, 
+0

這是否DISTINCT刪除受騙者中,如果你有兩個與目的相同的號碼? – user6631314

+0

我發現它確實刪除了。這是一個很好的解決方案,除了我需要保留模糊。例如,可能有多個JPG文件擴展名。 – user6631314

+0

它看起來像一個子查詢可能需要在這個答案https://stackoverflow.com/questions/12464037/two-sql-left-joins-produce-incorrect-result/12464135#12464135 – user6631314