【发布时间】:2012-04-09 13:19:51
【问题描述】:
刚开始,这应该是一个简单的,但我一直无法找到一个好的来源,尤其是从 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
');
另一种方式: [类型 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 我完全迷路了。
这是第三个: [类型 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');
这是我看到的另一种查询已构建但无法开始工作的方式 [已编辑 - 现在可以工作了,谢谢@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) 有没有很好的资源可以学习不同的构建方法?我已经搜索了几个小时,但没有找到任何全面的内容。
谢谢!
【问题讨论】:
-
不知道 Joomla 但总的来说我尽量不要使用
ON DUPLICATE KEY UPDATE。我更喜欢尝试查询并生成异常/错误,然后使用第二个查询对该错误采取行动。我使用了很多不同的 ORM 和 DBAL 层,但它们都没有从他们的 API 中支持该功能,您通常必须恢复到他们必须使用的任何原始 SQL 工具来完成它。 -
啊,好点子!我现在正在做的事情永远不会在其他任何地方使用,但这绝对是我在学习时会保留的东西。谢谢!
标签: php mysql joomla joomla1.6 joomla2.5