【问题标题】:How can I prepare a sql-statement in a sql-statement in ZF2?如何在 ZF2 的 sql 语句中准备 sql 语句?
【发布时间】:2016-02-26 16:02:38
【问题描述】:

我是 ZF2 新手,遇到以下问题:

在一个 db-table 中,我得到了两个引用另一个表的 id。如果我 选择他们,我想显示球员的名字,而不是 id 保存在表格中。

player (id, name)

board (id, playerA, playerB)

playerAplayerB 是整数,保存玩家表中的玩家 id。我已经与骨架应用程序相处融洽,但我可以传递给tableGateway->select() 的唯一子句是 where 子句。

有人有想法吗?如何在 ZF2 中准备这样的语句?

SELECT id, (SELECT name FROM player WHERE id = playerA) AS playerA, (SELECT name FROM player WHERE id = playerB) AS playerB FROM board

我找到的教程和参考资料都以 JOIN 结尾。但这不适合这里,对吧?

编辑: 以下是它,骨架应用程序可以正常工作

protected $select;

public function fetchAll()  {

$this->select = new Select();

$this->select->from('board')
    ->columns(array('id', 'kindOf', ...))
    ->join(['pA' => 'player'], 'pA.id = board.playerA', ['playerA' => 'name'])
    ->join(['pB' => 'player'], 'pB.id = board.playerB', ['playerB' => 'name']);

$resultSet = $this->tableGateway->selectWith($this->select);
return $resultSet;
}

【问题讨论】:

    标签: php mysql zend-framework2


    【解决方案1】:

    您的问题不是 ZF2 问题,而是 SQL 问题。例如,您可以这样写:

    SELECT id, pA.name AS playerA, pB.name AS playerB
    FROM board
    INNER JOIN player AS pA ON pA.id=board.playerA
    INNER JOIN player AS pB ON pB.id=board.playerB
    

    在 ZF2 中:

    $select = new Select();
    $select->from('board')
           ->columns('id')
           ->join(['pA' => 'player', 'pA.id = board.playerA', ['playerA' => 'name'])
           ->join(['pB' => 'player', 'pB.id = board.playerB', ['playerB' => 'name'])
    

    【讨论】:

    • 对不起,我病了两个星期,现在回到活着的人身上。
    • 首先,感谢您的回复。我试图解决这个问题,它终于奏效了!我真的应该做更多的连接,而不是我在上面所做的怪异陈述 =)
    猜你喜欢
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 2020-05-04
    • 2010-11-18
    相关资源
    最近更新 更多