Postgres UPDATE查询条件

时间:2018-03-07 09:37:30

标签: php sql postgresql

假设我有以下表格

CREATE TABLE discussions (
    d_id SERIAL NOT NULL PRIMARY KEY,
    d_v_id INTEGER /* foreign key */
);

CREATE TABLE votings (
    v_id SERIAL NOT NULL PRIMARY KEY,
    v_active BOOLEAN NOT NULL,
    v_d_id INTEGER NOT NULL /* foreign key */
 );

这些表被认为具有1:n的关系(投票是n)。表discussions将外键存储到单个投票中,该投票被视为当前活动。我想要做的是在php中创建一个函数,将字段discussions.d_v_id设置为特定的id。但是,只有在要设置的投票的字段v_activetrue时才会发生这种情况。请注意,d_v_id也可以设置为null,我希望通过单个查询实现此目的

到目前为止,这是我能够提出的:

public function setVoting($discussionId, $vId) {
    $this->init();
    $query = "UPDATE discussions d SET d_v_id = ? 
              FROM votings v 
              WHERE d_id = ? 
                  AND (v_id = ? OR d_v_id IS NOT NULL) 
                  AND v_d_id = ? 
                  AND v_active = TRUE";
    $this->con->beginTransaction();
    $stmt = $this->con->prepare ( $query );
    $stmt->bindParam(1, $vId);
    $stmt->bindParam(2, $discussionId);
    $stmt->bindParam(3, $vId);
    $stmt->bindParam(4, $discussionId);
    $stmt->execute();
    if ($stmt->rowCount() == 1){
        $this->con->commit();
        return true;
    }
    $this->con->rollBack();
    return false;
}

php代码工作正常,它只是关于sql查询。此代码的问题是,即使此投票有v_active = false,如果另一个投票目前设为d_v_id

,它也会设置投票ID

0 个答案:

没有答案