刚开始,这应该是一个简单的源,但我还没能找到一个好的源,尤其是在1.5到1.6/1.7/2.5的转换中。
构建组件和其他问题不断遇到语法问题。
例如,以下是我构建查询的一种方法:[类型1]
$query->SELECT('u.id as UserID
, u.name AS Name
, uppi.profile_value AS Hair
, uppi2.profile_value AS Height
');
$query->FROM (' #__users AS u');
$query->LEFTJOIN (' #__user_profiles AS uppi ON u.id = uppi.user_id AND uppi.ordering = 1 ');
$query->LEFTJOIN (' #__user_profiles AS uppi2 ON u.id = uppi2.user_id AND uppi2.ordering = 2 ');
$query->GROUPBY (' u.id
, u.name
, uppi.profile_value
');
另一种方式:[TYPE 2]
$query->SELECT('u.id as UserID
, u.name AS Name
, uppi.profile_value AS Hair
, uppi2.profile_value AS Height
')
->FROM (' #__users AS u')
->LEFTJOIN (' #__user_profiles AS uppi ON u.id = uppi.user_id AND uppi.ordering = 1 ')
->LEFTJOIN (' #__user_profiles AS uppi2 ON u.id = uppi2.user_id AND uppi2.ordering = 2 ')
->GROUPBY (' u.id
, u.name
, uppi.profile_value
');
令人困惑的是,像"LEFTJOIN"这样的mysql调用是一个词,而不是两个词。所以,如果我想使用INSERT…ON DUPLICATE KEY UPDATE
,我完全迷失了方向。
以下是第三个:[TYPE 3]
$query->SELECT('u.id as UserID
, u.name AS Name
, uppi.profile_value AS Hair
, uppi2.profile_value AS Height
');
$query->FROM (' #__users AS u');
$query->JOIN ('LEFT', ' #__user_profiles AS uppi ON u.id = uppi.user_id AND uppi.ordering = 1 ');
$query->JOIN ('LEFT', ' #__user_profiles AS uppi2 ON u.id = uppi2.user_id AND uppi2.ordering = 2 ');
$query->GROUPBY (' u.id
, u.name
, uppi.profile_value
');
$query->ORDER ('u.name ASC');
这是我看到的另一种构建查询但无法工作的方式[EDITED-现在工作,谢谢@cppl!][类型4]
$query= "SELECT `u`.`id` as UserID
, `u`.`name` AS Name
, `uppi`.`profile_value` AS Hair
, `uppi2`.`profile_value` AS Height
FROM `#__users` AS u
LEFT JOIN `#__user_profiles` AS uppi ON `u`.`id` = `uppi`.`user_id` AND `uppi`.`ordering` = 1
LEFT JOIN `#__user_profiles` AS uppi2 ON `u`.`id` = `uppi2`.`user_id` AND `uppi2`.`ordering` = 2
";
我已经完成了Joomla MVC教程和Lynda。。。除了"这里有一些代码-PLOP"之外,没有人真正解决这个问题
References:
--//www.theartofjoomla.com/home/9-developer/135-database-upgrades-in-joomla-16.html
--//stackoverflow.com/questions/8467858/joomla-1-7-db-query-does-not-work-when-query-has-an-ampersand
--developer.joomla.org/standards/ch03s10.html
--forum.joomla.org/viewtopic.php?p=2506722
--forum.joomla.org/viewtopic.php?p=1200668
--docs.joomla.org/API16:JDatabaseQuery
--//fsadventures.com/2011/01/some-basic-joomla-database-call-functions/
--//www.sourcecodester.com/php/3863/updating-multiple-rows-mysql-using-php.html
--//stackoverflow.com/questions/7047471/mysql-query-syntax-error
问题:
1) 这些之间有什么区别吗?
2) 有理由使用一种方法而不是另一种方法吗?
3) 有没有一个好的来源来学习不同的构建方法?我找了好几个小时都没有找到任何全面的东西。
谢谢!
- 你的类型1,2&3使用较新的JDatabaseQuery对象,而类型4使用较旧的样式将查询设置为SQL字符串
- 如果类型4不起作用,是否会出现SQL错误?(你是否打开了Joomla的调试模式,以便在应用程序配置文件中转储SQL错误?)
- JDatabaseQuery用于提供支持多个SQL数据库所需的抽象,而不仅仅是mySQL,这就是为什么
$query
对象具有select()
、where()
、join()
等函数 - 请记住,
->leftJoin()
是对名为leftJoin()
的JDatabaseQuery函数的PHP调用,因此必须是一个单词,即不能是两个单词 leftJoin()
实际上只是调用了join('LEFT',$conditions)
,所以它是一个可读性实现,而不是功能差异- 因此,类型1,2&3实际上是相同的——它们只是具有不同程度的可读性(例如,IMHO类型2和3比类型1更难阅读和维护)
你似乎已经找到了Joomla的所有在线来源!文档,除了Joomla!谷歌小组(CMS开发人员、通用开发人员和平台开发人员)。
唯一的其他来源是Andrew Eddies的"学习Joomla的艺术!"。我自己没有用过安德鲁的东西,但我听到了很多关于它的好消息——最后一次Joomla!我参加的那天。
编辑根据这个错误,我认为这是因为您将标识符u.id
封装为一个标识符。试试类似的东西:
SELECT `u`.`id` AS "UserID" FROM `#__users` AS `u`