在Mediawiki的php框架中创建SQL连接

问题描述 投票:0回答:1

背景:

Mediawiki的PHP框架提供了用于创建要针对应用程序执行的SQL语句的函数。创建一个简单的SELECT FROM WHERE语句很容易并且有很好的文档记录,但我正在尝试创建一个JOIN语句而我不理解文档。这些例子是分散的和脱节的。

目前的尝试:

我正在尝试重新创建的SQL如下所示。使用phpmyadmin我已经测试了这段代码并返回了我需要的结果:

SELECT user.user_id, user.user_name, user.user_real_name, user.user_email
FROM user
LEFT JOIN ipblocks ON user.user_id = ipblocks.ipb_user
WHERE ipblocks.ipb_id IS NULL

将其翻译成Mediawiki的框架看起来像这样,但这段代码不起作用。功能文档是here

$result = $this->dbr->select(
    array( $this->dbr->tableName( 'user' )),
    array( 'user_name', 'user_id', 'user_email' ),
    array( 'ipb_id' => 'NULL'),
    __METHOD__,
    array( 'GROUP_BY' => 'user_id DSC' ),
    array( 'ipblocks' => array( 'LEFT JOIN', 'user_id=ipb_user' ) )
);

可以通过调用selectSQLText()来检查此代码生成的SQL。此函数返回生成的SQL而不是执行它。调用约定是相同的。这导致以下SQL:

SELECT user_name,user_id,user_email
FROM `user`
WHERE ipb_id = 'NULL'

我可以看到函数返回的原因,但我不明白为什么忽略了最后两个参数。 GROUP_BY和JOIN部分已被忽略。这是为什么以及如何更正代码?

谢谢。

php mediawiki
1个回答
2
投票

我不是Mediawiki的用户,我只是掩盖了功能文档。至于分组,我相信你应该使用GROUP BY数组键,而不是GROUP_BY。至于连接,我认为你必须在ipblocks参数中包含$table表才能在$join_conds中使用它。

所以,试试这个:

$result = $this->dbr->select(
    array( 'user', 'ipblocks' ),
    array( 'user_name', 'user_id', 'user_email' ),
    array( 'ipb_id' => null),
    __METHOD__,
    array( 'GROUP BY' => 'user_id DSC' ),
    array( 'ipblocks' => array( 'LEFT JOIN', 'user_id=ipb_user' ) )
);
© www.soinside.com 2019 - 2024. All rights reserved.