使用if条件在zend框架2中运行子查询

时间:2017-04-28 10:51:47

标签: zend-framework2

SELECT
t1.post_id, t1.user_id, t1.total_likes, t1.total_comments,
t2.name,
if(t3.user_id, 1, 0) as user_like
FROM `game_posts` as t1
left join users as t2 ON t1.user_id=t2.user_id
left join(
 select post_id, user_id from post_likes where user_id=1
)t3
on t1.post_id=t3.post_id

where t1.game_id=1
order by t1.post_id desc

我想在zend框架2中执行此查询,这是我的代码,但我可以实现其中包含子查询的第二个连接。

$adapter = $this->tableGateway->getAdapter();
$sql = new Sql($adapter);
$select = $sql->select();

// MAIN POST TABLE
$select->from(array('t1' => 'game_posts'));

// GET POST USER
$select->join(
    array('t2' => 'users'),
    new Expression('t1.user_id = t2.user_id'),
    array(
        "user_name"     => "name"
    ),
    'LEFT'
);


$select->where(array("t1.game_id"=>$gameId));

$select->order("post_date DESC");

$statement = $sql->prepareStatementForSqlObject($select);
$results = $statement->execute();

$resultSet = new ResultSet();
$resultSet->initialize($results);
$result = $resultSet->toArray();

return $result;

基本上有3个表 game_posts 用户 post_likes 表, 我正在获取所有包含game_id = 1的帖子,其中包含创建帖子的用户的姓名以及当前用户标志,如果他喜欢这个帖子的话。

请帮帮我

1 个答案:

答案 0 :(得分:0)

有您的疑问:

$adapter = $this->tableGateway->getAdapter();
$sql = new Sql($adapter);
$select3 = $sql->select();
$select3->columns([post_id, user_id])->from(post_likes)->where(['user_id' => 1]);

$select = $sql->select();
$select->columns(['post_id', 'user_id', 'total_likes', 'total_comments', 'user_like' => new Expression('if(t3.user_id, 1, 0)')])
->from(['t1' => 'game_posts'])
->join(['t2' => 'users'], 't1.user_id=t2.user_id', ['name'], Select::JOIN_LEFT)
->join(['t3' => $select3], 't1.post_id=t3.post_id', [], Select::JOIN_LEFT)
->where(['t1.game_id' => $gameId])
->order('post_date DESC');
相关问题