不能让CONCAT内的子查询工作

时间:2012-04-02 19:33:05

标签: 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;', '\''), 
     '&quot;', '"'), 
    '&lt;', '<'), 
   '&gt;', '>')
  ), 
  '\n\n' ORDER BY je.date_entered DESC SEPARATOR ''
) AS enteries

工作正常。当我添加这个子查询时:

' by ', (SELECT first_name FROM users WHERE id = je.created_by),

导致此组Concat:

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.S。我没有发布输入查询,因为它太可笑了但是如果你想要我的话我可以。

2 个答案:

答案 0 :(得分:0)

这是我最后的工作解决方案:

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

答案 1 :(得分:0)

当您在group_concatconcat中使用子查询时,他们将返回:

  • 如果子查询返回0行或NULL值
  • ,则为NULL 如果子查询返回1行,则
  • 某事(可能是好的)
  • 如果子查询返回多行,则出现错误(1242)

据推测,您的子查询没有返回任何行或返回NULL值。