PHP在mysql查询中内爆替代品

时间:2012-02-13 23:50:07

标签: php mysql mysqli

我需要一些替代内存的mysql查询。经过研究发现了concat函数。

问题是,我可以通过像CONCAT_WS('',sender.fname,sender.mname,sender.lname)AS sender_name这样的空格来连接吗?如果其中一个值为null,它是否有可能产生错误?

这是我的查询。

SELECT message.id, message.from_id, message.to_id, message.subject, 
                    message.date, message.deleted, message.read, 
                    CONCAT_WS(' ',sender.fname, sender.mname, sender.lname) AS sender_name, 
                    CONCAT_WS(' ',recipient.fname, recipient.mname, recipient.lname) AS recipient_name,  
                    FROM msghistory AS message 
                    LEFT JOIN users AS sender ON sender.id=message.from_id, 
                    LEFT JOIN users AS recipient ON recipient.id=message.to_id 
                    GROUP BY message.id DESC

还有一个问题,在此查询中,可能找不到CONCAT_WS('',recipient.fname,recipient.mname,recipient.lname)AS recipient_name(如果users表中没有匹配的行)。这会给出任何错误吗?

4 个答案:

答案 0 :(得分:1)

是的,您可以像这样使用CONCAT_WS。如果其中一个参数为NULL,则不会出现错误。不使用NULL参数。

它在manual

中说明了这一点
  

CONCAT_WS()不会跳过空字符串。但是,它会在分隔符参数后跳过任何NULL值。

这也很容易为自己验证:

SELECT CONCAT_WS(' ', 'abc', NULL, 'def')
'abc def'

答案 1 :(得分:1)

是的,你可以。如果有null,则不会有任何错误

答案 2 :(得分:1)

  

CONCAT_WS()不会跳过空字符串。但是,它会在分隔符参数后跳过任何NULL值。

那应该回答你的问题。

答案 3 :(得分:0)

即使详细,在处理可能出现不可接受的NULL值时,您还需要使用COALESCE函数:

CONCAT_WS(' ', COALESCE(val1, ''), COALESCE(val2, ''), ...)

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce