Php 在codeigniter中将mysql查询转换为活动记录

Php 在codeigniter中将mysql查询转换为活动记录,php,mysql,codeigniter-3,Php,Mysql,Codeigniter 3,如何将以下内容转换为正确的codeigniter活动记录语法 function postsInterest($user_id) { $query = $this->db->query(" SELECT b.*, users.country, users.company, users.pic_small, users.subscription, COUNT(leads.user_id) AS leads FROM trad

如何将以下内容转换为正确的codeigniter活动记录语法

function postsInterest($user_id)
{
    $query = $this->db->query("
    SELECT b.*,
    users.country,
    users.company,
    users.pic_small,
    users.subscription,
    COUNT(leads.user_id) AS leads
    FROM trading AS u
    INNER JOIN trading AS b
    LEFT JOIN users ON users.user_id = b.user_id
    LEFT JOIN leads ON b.trade_id = leads.trade_id
    WHERE u.stock_type = b.stock_type
    AND u.buying_selling != b.buying_selling
    AND u.bond = b.bond
    AND u.user_id = $user_id
    AND b.user_id != $user_id
    AND u.timestamp > unix_timestamp(now() - interval 120 DAY)
    AND b.timestamp > unix_timestamp(now() - interval 120 DAY)
    GROUP BY b.trade_id
    ORDER BY b.timestamp DESC");
    if ($query->num_rows() > 0) {
        return $query->result_array();
    } else {
        return false;
    }
}

以上内容可以快速解决问题,但希望与其他查询保持一致,以便我可以使用分页库。

我不确定查询是否有效
内部连接作为b进行交易
,但是没有指定连接条件,尽管所需的谓词在where子句中。这些是“连接条件”

在每一个表中,一侧有一个表
u
,另一侧有一个表
b
。使用显式连接语法时,应将所有此类谓词移动到连接上

我相信您将更成功地将其转换为codeigniter语法:

SELECT
      b.*
    , users.country
    , users.company
    , users.pic_small
    , users.subscription
    , COUNT(leads.user_id) AS leads
FROM trading AS u
INNER JOIN trading AS b ON u.stock_type = b.stock_type
      AND u.buying_selling != b.buying_selling
      AND u.bond = b.bond
LEFT JOIN users ON users.user_id = b.user_id
LEFT JOIN leads ON b.trade_id = leads.trade_id
WHERE u.user_id = @user_id
AND b.user_id != @user_id
AND u.timestamp > unix_timestamp(now() - interval 120 DAY)
AND b.timestamp > unix_timestamp(now() - interval 120 DAY)
GROUP BY
      b.trade_id
ORDER BY
      b.timestamp DESC

请注意,您依赖于MySQL对分组查询的非标准支持,如果sql\u模式更改为仅\u full\u group\u,则我们的查询将失败。在MySQL 5.7.2中,默认值仅为_full _group _by

这都在codeigniter 3手册中,请先尝试一下。如果您不知道这很酷,但我不会问文档中是否有明显的问题。您的问题现在解决了吗?你对这个答案还有疑问吗?若要接受答案“”,请参阅
SELECT
      b.*
    , users.country
    , users.company
    , users.pic_small
    , users.subscription
    , COUNT(leads.user_id) AS leads
FROM trading AS u
INNER JOIN trading AS b ON u.stock_type = b.stock_type
      AND u.buying_selling != b.buying_selling
      AND u.bond = b.bond
LEFT JOIN users ON users.user_id = b.user_id
LEFT JOIN leads ON b.trade_id = leads.trade_id
WHERE u.user_id = @user_id
AND b.user_id != @user_id
AND u.timestamp > unix_timestamp(now() - interval 120 DAY)
AND b.timestamp > unix_timestamp(now() - interval 120 DAY)
GROUP BY
      b.trade_id
ORDER BY
      b.timestamp DESC