php – 在Joomla中构建查询的不同方法?

刚刚开始,这应该是一个简单的,但我没有找到一个好的来源,特别是1.5至1.6 / 1.7 / 2.5转换.

构建组件以及其他问题会不断遇到语法问题.

例如,这是我构建查询的一种方式:
[TYPE 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');

这是我看到的查询构建但无法工作的另一种方式[编辑 – 现在正在工作,感谢@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和2型; 3使用较新的JDatabaseQuery对象,而类型4使用较旧的样式将查询设置为SQL字符串.

>如果类型4不起作用,您会收到SQL错误吗? (你是否打开了Joomla的调试模式,这样你就可以通过应用程序配置文件转出SQL错误?)

> JDatabaseQuery用于提供支持多个SQL数据库而不仅仅是mySQL所需的抽象,这就是为什么$query对象具有select(),where(),join()等函数的原因…

>请记住 – > leftJoin()是对JDatabaseQuery函数的一个名为leftJoin()的PHP调用,因此必须是一个单词即.它不可能是两个.

> leftJoin()实际上只是调用join(‘LEFT’,$conditions)所以它是一个可读性实现而不是功能差异.

>所以,类型1,2和& 3实际上是相同的,它们只具有不同的可读性(例如,恕我直言2型和3型比1型更难阅读和维护).

您好像找到了Joomla的所有在线资源!文档,除了Joomla! Google网上论坛(CMS Dev,General DevPlatform Dev).

唯一的另一个来源是Andrew Eddies“Learn the Art of Joomla!”.我自己没有使用安德鲁的东西,但我听说过很多关于它的好东西,最后一个Joomla!我参加的一天.

编辑
根据错误,我会说这是因为您将标识符u.id封装为一个标识符.尝试类似的东西:

SELECT `u`.`id` AS "UserID" FROM `#__users` AS `u`
点赞