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'), ''', '\''),
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'),
''', '\''),
'"', '"'),
'<', '<'),
'>', '>')
),
'\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'),
''', '\''),
'"', '"'),
'<', '<'),
'>', '>')
),
'\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'), ''', '\''), '"', '"'), '<', '<'), '>', '>')), '\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'), ''', '\''), '"', '"'), '<', '<'), '>', '>')), '\n\n' ORDER BY je.date_entered DESC SEPARATOR '') AS enteries