我想在查询中对别名使用AS语句。
我用这段代码:
$query->select($db->quoteName(array('NameInQ as nin', 'Name')));
无论如何,我得到这个错误:
“字段列表”中的“未知列”NameInQ as in“
NameInQ
作为表中的列名存在。nin
应该是别名。我做错什么了?
最佳答案
当你告诉约姆拉:
$query->select($db->quoteName(array('NameInQ as nin', 'Name')));
echo $query->dump();
会告诉你:SELECT `NameInQ as nin`,`Name`
看看它怎么不知道如何区分别名列名和包含空格的字符串?
文件:https://api.joomla.org/cms-3/classes/JDatabaseQuery.html#method_quoteName
如果要从
qn()
/quoteName()
方法中为Joomla中的列名指定别名,则需要为所有列指定相应的别名。$query->select($db->quoteName(array('NameInQ', 'Name'), array('nin', 'Name')));
呈现为:
SELECT `NameInQ` AS `nin`,`Name` AS `Name`
// ^-------^----^---^-^----^----^----^-- everything aliased, everything backtick wrapped
当然,您也可以对
quoteName()
调用进行个性化设置,避免对每个列使用别名。$query->select(array($db->quoteName('NameInQ', 'nin'), $db->quoteName('Name')));
呈现为:
SELECT `NameInQ` AS `nin`,`Name`
最后,事实是:您甚至不需要引用任何示例列名,因为没有额外的方法调用,查询将是稳定/安全的。*我建议不要使用它们,以尽量减少查询膨胀和开发人员的眼睛疲劳。
$query->select(array('NameInQ AS nin', 'Name'));
甚至是原始形式:
$query->select('NameInQ AS nin, Name');
对于记录,
Name
(MYSQL不区分大小写)是关键字,但不是保留关键字。参见MySQL文档:https://dev.mysql.com/doc/refman/5.5/en/keywords.html#keywords-5-5-detailed-N(在
Name
旁边没有“(R)”