【问题标题】:How could I write sub-query with right join in cakePHP?我如何在 cakePHP 中编写带有正确连接的子查询?
【发布时间】:2016-02-25 16:51:09
【问题描述】:

我想在cake php中用sql的右连接编写子查询,在下面查询

SELECT stkid,s.id as stk_id, s.userid as stk_userid,
       s.productid as productid, u.id as userid
FROM (select * FROM stocks as st where st.`productid` = 1) as s
  right join users as u on (u.id = s.userid)
group by u.id

请帮我解决这个问题 任何帮助或建议将不胜感激

【问题讨论】:

  • 大多数人觉得右连接太混乱了。 (左连接已经够难了……)这就是为什么我总是做左连接。 (即切换连接类型和左侧/右侧表格。)
  • 您尝试从这篇文章中回答了吗? - stackoverflow.com/questions/22497923/…
  • Rulisp No 以上帖子对我不起作用
  • jarlh 我对右连接非常满意,我已经在 cakephp 中编写了右连接查询,但坚持使用子查询:(
  • this 这样的东西怎么样?

标签: php mysql sql cakephp cakephp-2.0


【解决方案1】:

首先,我不得不说你的 SQL 查询没有优化:你的 FROM 子查询没用。

看看:

SELECT 
    stkid, 
    s.id AS stk_id, 
    s.userid AS stk_userid,
    s.productid AS productid, 
    u.id AS userid
FROM stocks AS s 
RIGHT JOIN users AS u 
    ON u.id = s.userid
WHERE s.productid = 1
GROUP BY u.id

直接 SQL

“我只想要这个sql的答案”,简单的方法是这样(在控制器中):

    // get the DB link
$pdo = $this->ModelOfThisController->getDataSource()->getConnection();

$sql = "SELECT 
            stkid, 
            s.id AS stk_id, 
            s.userid AS stk_userid,
            s.productid AS productid, 
            u.id AS userid
        FROM (
            SELECT * 
            FROM stocks AS st 
            WHERE st.`productid` = 1
            ) AS s
        RIGHT JOIN users AS u 
            ON (u.id = s.userid)
        GROUP BY u.id
    ";


$req = $pdo->prepare($sql);
$req->execute(array(
    // ':param1' => $param1,
    // ':param2' => $param2,
    ));

$data = $req->fetch(PDO::FETCH_ASSOC);
    // ...

ORM

另一种方式是with cakePHP ORM,但我认为您不能将 FROM 更改为模型表名以外的任何其他内容...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多