Mysql 无法使CONCAT内的子查询正常工作

Mysql 无法使CONCAT内的子查询正常工作,mysql,Mysql,我有以下代码: GROUP_CONCAT( CONCAT( DATE_FORMAT(je.date_entered, '%m/%d/%Y - %h:%i%p'), ' by ', '\n', REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(je.description, '<br />', '\n'), '&#039;', '\''),

我有以下代码:

GROUP_CONCAT(
  CONCAT( 
   DATE_FORMAT(je.date_entered, '%m/%d/%Y - %h:%i%p'), 
   ' by ', 
   '\n', 
   REPLACE(
    REPLACE(
     REPLACE(
      REPLACE(
       REPLACE(je.description, '<br />', '\n'), 
      '&#039;', '\''), 
     '&quot;', '"'), 
    '&lt;', '<'), 
   '&gt;', '>')
  ), 
  '\n\n' ORDER BY je.date_entered DESC SEPARATOR ''
) AS enteries
导致该组出现以下情况:

GROUP_CONCAT(
 CONCAT(
  DATE_FORMAT(je.date_entered, '%m/%d/%Y - %h:%i%p'), 
  ' by ', 
  (SELECT first_name FROM users WHERE id = je.created_by), 
  '\n',   
  REPLACE(
   REPLACE(
    REPLACE(
     REPLACE(
      REPLACE(je.description, '<br />', '\n'), 
     '&#039;', '\''), 
    '&quot;', '"'), 
   '&lt;', '<'), 
  '&gt;', '>')
 ), 
 '\n\n' ORDER BY je.date_entered DESC SEPARATOR '')
AS enteries
它破坏了整个dang,没有导致错误,只是返回null

这可能看起来很复杂,但我没有选择将所有内容都放在php中——在选择过程中,所有这些都必须在mysql中完成


p、 我没有发布enter查询,因为它太长了,但如果您愿意,我可以发布。

这是我的最终有效解决方案:

GROUP_CONCAT(CONCAT(DATE_FORMAT(je.date_entered, '%m/%d/%Y - %h:%i%p'), ' by ', IF((SELECT first_name FROM users WHERE id LIKE je.created_by) IS NULL, '', (SELECT first_name FROM users WHERE id LIKE je.created_by)), ' ', IF((SELECT last_name FROM users WHERE id LIKE je.created_by) IS NULL, '', (SELECT last_name FROM users WHERE id LIKE je.created_by)), '\n', REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(je.description, '<br />', '\n'), '&#039;', '\''), '&quot;', '"'), '&lt;', '<'), '&gt;', '>')), '\n\n' ORDER BY je.date_entered DESC SEPARATOR '') AS enteries

在组_concat和concat中使用子查询时,它们将返回:

如果子查询返回0行或空值,则为NULL 如果子查询返回1行,则可能是好消息 如果子查询返回多行,则出现错误1242
假设您的子查询没有返回任何行或返回空值。

愚蠢的问题:对于所有由创建的je.created\u,用户表中是否有有效的用户?意思是,从来没有一个空的创建或超出范围的索引值?关于p.s.谢谢,但张贴的部分是够可笑的,因为它是:是的。。。这就是我最初认为的可能是je.created_,但它确实包含了价值。。。当我运行-GROUP_CONCATje.created_by,“\n\n”ORDER by je.date_输入DESC SEPARATOR作为entries时,它返回正确的值。@Banning:可能不是问题的答案,但您可能希望将限制1添加到子查询中,以确保只得到一个结果。@Banning:用于调试,也许可以试着编码一个值来代替je.created_。我不确定您是否可以在子查询中引用外部查询中的列。您可能需要进行其他类型的连接,或者整个查询可能需要重新构造。很久以前我遇到过这样的问题,我一辈子都不记得我是如何解决的。是的,我的子查询返回了一行,它只返回了一行NULL。。。它还返回了3行。。。所以我不得不改变自己,喜欢上我
GROUP_CONCAT(CONCAT(DATE_FORMAT(je.date_entered, '%m/%d/%Y - %h:%i%p'), ' by ', IF((SELECT first_name FROM users WHERE id LIKE je.created_by) IS NULL, '', (SELECT first_name FROM users WHERE id LIKE je.created_by)), ' ', IF((SELECT last_name FROM users WHERE id LIKE je.created_by) IS NULL, '', (SELECT last_name FROM users WHERE id LIKE je.created_by)), '\n', REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(je.description, '<br />', '\n'), '&#039;', '\''), '&quot;', '"'), '&lt;', '<'), '&gt;', '>')), '\n\n' ORDER BY je.date_entered DESC SEPARATOR '') AS enteries