Php 当不存在多行时,也将其合并

Php 当不存在多行时,也将其合并,php,mysql,sql,concatenation,concat,Php,Mysql,Sql,Concatenation,Concat,我需要将多个行-列值合并到一列中。我知道我可以用GROUP_CONCAT来做这件事。但它不符合我的需要。这是我的疑问: SELECT GROUP_CONCAT(twv.value ORDER BY twv.id ASC SEPARATOR ';') as needed_values FROM table_with_values twv WHERE twv.valuetype_id IN (9,12,13,15,17,29) GROUP BY twv.person_id 问题

我需要将多个行-列值合并到一列中。我知道我可以用GROUP_CONCAT来做这件事。但它不符合我的需要。这是我的疑问:

  SELECT
  GROUP_CONCAT(twv.value ORDER BY twv.id ASC SEPARATOR ';') as needed_values
  FROM table_with_values twv
  WHERE twv.valuetype_id IN (9,12,13,15,17,29)
  GROUP BY twv.person_id
问题是,当找不到例如valuetype_id=13的行时,当然不会连接该值

如果person_id没有valuetype_id=13的值,那么将在该部分中插入“-”,我如何实现这一点

谢谢

@贾尔斯 我试过你的想法,后来又改变了一点。测试了下面的查询,它给了我5行,而不是预期的6行,因为我离开了

SELECT vid
FROM (SELECT 9 vid UNION SELECT 12 UNION SELECT 13 UNION SELECT 15 UNION SELECT 17 UNION SELECT 29) vids
LEFT JOIN sollicitant_profiel sp1 ON (sp1.vraag_id = vids.vid)
WHERE sp1.sollicitant_id = 1
而这一行确实有效,并按预期给出了6行:

SELECT vids.vid, vids2.vid
FROM (SELECT 9 vid UNION SELECT 12 UNION SELECT 13 UNION SELECT 15 UNION SELECT 17 UNION SELECT 29) vids
LEFT JOIN (SELECT 9 vid UNION SELECT 12 UNION SELECT 13 UNION SELECT 15 UNION SELECT 17) vids2 ON (vids.vid = vids2.vid)

像这样的方法应该会奏效:

SELECT
  GROUP_CONCAT(COALESCE(twv.value,'-') ORDER BY twv.id ASC SEPARATOR ';') as needed_values
FROM table_with_values twv
RIGHT JOIN (SELECT 9 vid UNION SELECT 12 UNION SELECT 13 UNION SELECT 15 UNION SELECT 17 UNION SELECT 29) vids
ON vids.vid = twv.valuetype_id
GROUP BY twv.person_id

没有你的价值观,我无法测试它。vids子选择作为临时表可能更好。

如果为空,则可以使用,当GROUP CONCAT为空时,它返回第二个参数“-”

SELECT
  IF_NULL(GROUP_CONCAT(twv.value ORDER BY twv.id ASC SEPARATOR ';'),'-') as needed_values
FROM table_with_values twv
LEFT JOIN (SELECT 9 vid UNION SELECT 12 UNION SELECT 13 UNION SELECT 15 UNION SELECT 17 UNION SELECT 29) vids
ON vids.vid = twv.valuetype_id
GROUP BY twv.person_id