我有PHP 5代码访问MySQL 5服务器上的MyISAM表.查询如下所示:
SELECT CONCAT(fName1,' ',mName2,' ',lName3) AS userName
FROM users
WHERE level > 10
Run Code Online (Sandbox Code Playgroud)
当没有MNAME填写,我期待像"FNAME LNAME"输出,但我发现了""(空字符串),而不是(返回的行数是正确的).我哪里弄错了?
PHP代码:
<?php
$result = mysql_query($the_above_query);
while ($result_row = mysql_fetch_assoc($result)) {
// do stuff with the name
// except I'm getting empty strings in $result_row['userName']
}
Run Code Online (Sandbox Code Playgroud)
表结构的相关部分:
CREATE TABLE users {
/* -snip- */
`fName1` varchar(50) default NULL,
`mName2` varchar(50) default NULL,
`lName3` varchar(50) default NULL,
`level` int(11) default 0,
/* -snip- */
} ENGINE=MyISAM DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)
(也就是说,这种方式(MySQL中的列连接)是一个好主意,或者我应该将列提取到PHP并将它们加入那里?)
事实证明我得到了一个NULL; PHP同样处理返回的NULL和空字符串(""),您必须与===进行比较才能看到差异.
cho*_*osh 25
来自谷歌:http://bugs.mysql.com/bug.php?id = 480
[2003年5月23日4:32] Alexander Keremidarski
感谢您抽出宝贵时间给我们写信,但这不是错误.请仔细检查http://www.mysql.com/documentation/上提供的文档 以及有关如何报告错误的说明,请访问http://bugs.mysql.com/how-to-report.php
这是CONCAT()函数的记录行为.
从手册章节6.3.2字符串函数
CONCAT(str1,str2,...)返回连接参数产生的字符串.如果任何参数为NULL,则返回NULL
改为使用CONCAT_WS()或使用IFNULL()函数包装NULLable参数.
CONCAT_WS的文档和用法:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat-ws
Ers*_*yan 16
来自MYSQL文档
如果任何参数为NULL,则CONCAT()返回NULL.
你想使用CONCAT_WS()
CONCAT_WS(separator,str1,str2,...)
Run Code Online (Sandbox Code Playgroud)
但最好的办法是只需将其拉回来并使用php原因如果你需要不同的格式或者只是其中一个字段,你将不得不进行另一个db调用
Kee*_*per 11
在MySQL中将任何字符串连接到NULL值会导致NULL.在使用IFNULL进行连接之前,您必须检查NULL:
SELECT CONCAT(IFNULL(fName1,''),' ',IFNULL(mName2,''),' ',IFNULL(lName3,'')) AS userName
FROM users
WHERE level > 10
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20683 次 |
| 最近记录: |