2012-04-02 74 views
0

我有这样的代码:不能得到子查询里面CONCAT工作

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), 

导致该集团的毗连:

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 

它打破了整个党的事情,导致没有错误,只是返回null。

这看起来毛茸茸的纠结,但我没​​有在PHP中把一切融合在一起的选项 - 它必须全部在MySQL在选择过程中完成的。

p.s.我没有发布输入查询,因为它很可笑,但我可以,如果你想要我。

+1

的愚蠢的问题:对je.created_by的所有情况下,在用户表中的有效用户?意思是,从来没有一个NULL created_by或超出索引值的范围? – 2012-04-02 19:35:38

+4

关于p.s.谢谢,但张贴的部分就够荒谬的,因为它是:) – 2012-04-02 19:37:11

+0

是...这就是我最初的想法是,也许je.created_by接触什么,但它包含的价值......当我运行---- GROUP_CONCAT(JE .created_by),'\ n \ n'ORDER BY je.date_entered DESC SEPARATOR'')作为enteries ----它返回正确的值。 – Banning 2012-04-02 19:37:21

回答

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 
+0

很高兴听到您解决它。男人,那个查询是满口的。 – Travesty3 2012-04-02 20:14:50

0

当您使用内group_concatconcat子查询,他们将返回:

  • NULL如果子查询返回0行或空值
  • 如果子查询返回1行,则返回1行
  • 如果子查询返回大于1的错误(1242)一行

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

+0

啊我的子查询返回的行只是返回值为空行......也有人返回3行...所以我不得不改变“= je.created_by”“喜欢je.created_by” – Banning 2012-04-02 20:12:00

+0

好一点;更新。 – 2012-04-02 20:19:03