Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用zend框架的SQL查询逻辑_Php_Mysql_Zend Framework - Fatal编程技术网

Php 使用zend框架的SQL查询逻辑

Php 使用zend框架的SQL查询逻辑,php,mysql,zend-framework,Php,Mysql,Zend Framework,所以,我在逻辑方面的情况有点糟糕,我的数学也不太好, 因此,我需要您帮助构建一个查询,通过join查询从3个不同的表中获取信息。 我的结构是这样的: 用户表:具有主键ID 活动表:具有主键ID 用户活动表:具有用户id和活动id行。 我想提取用户id为X的user_campaign表中不存在的所有活动 我的查询是针对zend framework的。 我将感谢任何形式的帮助,thanx,以色列的晚上好 我当前的查询: $q = $this->select()

所以,我在逻辑方面的情况有点糟糕,我的数学也不太好, 因此,我需要您帮助构建一个查询,通过join查询从3个不同的表中获取信息。 我的结构是这样的:

用户表:具有主键ID 活动表:具有主键ID 用户活动表:具有用户id和活动id行。 我想提取用户id为X的user_campaign表中不存在的所有活动

我的查询是针对zend framework的。 我将感谢任何形式的帮助,thanx,以色列的晚上好

我当前的查询:

$q = $this->select()
                ->setIntegrityCheck(false)
                ->from(array('c' => 'campaigns'))
                ->join(array('uc'=> 'user_campaign'), 'uc.campaign_id != c.id AND uc.user_id != 1', array('campaign_id', 'user_id'));

您没有正确执行从联接开始的操作。你不想要uc.campaign_id=c.id=

您没有正确执行从联接开始的操作。你不想要uc.campaign_id=c.id=

使用左联接尝试此查询,并在联接表中为有效id为null添加WHERE,将返回联接右侧不存在的结果

public function check_access($campaign_id, $user_id) {
    $q = $this->select()
        ->from(array('c' => 'campaigns'))
        ->joinRight(array('uc'=> 'user_campaign'), 'uc.campaign_id = c.id', array('campaign_id', 'user_id'));
        ->where('uc.user_id != ?', $user_id)
        ->where('campaign_id = ?', $campaign_id);

    // User has an entry, return false
    if($this->fetchRow($select))
        return false;

    // User wasn't found, create an entry, and return true
    $this->insert('users_campaigns', array(
        'user_id'       => $user_id,
        'campaign_id'   => $campaign_id
    ));

    return true;
}

尝试此查询,使用左联接,并在联接表上为有效id为null添加WHERE,将返回联接右侧不存在的结果

public function check_access($campaign_id, $user_id) {
    $q = $this->select()
        ->from(array('c' => 'campaigns'))
        ->joinRight(array('uc'=> 'user_campaign'), 'uc.campaign_id = c.id', array('campaign_id', 'user_id'));
        ->where('uc.user_id != ?', $user_id)
        ->where('campaign_id = ?', $campaign_id);

    // User has an entry, return false
    if($this->fetchRow($select))
        return false;

    // User wasn't found, create an entry, and return true
    $this->insert('users_campaigns', array(
        'user_id'       => $user_id,
        'campaign_id'   => $campaign_id
    ));

    return true;
}

布莱恩!thanx做了很多,最后我在你之前做的查询的帮助下完成了,我写的最后一个查询是:

$q = $this->select()
            ->setIntegrityCheck(false)
            ->from(array('c' => 'campaigns'))
            ->joinLeft(array('uc' => 'user_campaign'), "uc.campaign_id = c.id AND uc.user_id = '$id'")
            ->where('uc.campaign_id IS NULL');
再次感谢各位!
你真棒

布莱恩!thanx做了很多,最后我在你之前做的查询的帮助下完成了,我写的最后一个查询是:

$q = $this->select()
            ->setIntegrityCheck(false)
            ->from(array('c' => 'campaigns'))
            ->joinLeft(array('uc' => 'user_campaign'), "uc.campaign_id = c.id AND uc.user_id = '$id'")
            ->where('uc.campaign_id IS NULL');
再次感谢各位!
你真棒

至少做点努力。我真的很努力,超过一个半小时,我的逻辑感真的很差,我发誓!你能把你所做的事贴出来吗?即使这很糟糕,它也会激励人们帮助你,而不是为你做你的工作,至少要做出一些努力。我真的真的很努力,超过一个半小时,我的逻辑感真的很糟糕,我发誓!你能把你所做的事贴出来吗?即使这很糟糕,它也会激励人们帮助你,而不是为你做你的工作仍然不起作用:也许我没有解释我自己,所以:每次用户看到的是一个活动,我不想让他再看到他。。。希望这将有助于编辑让你更接近你的最终目标,这是在这种情况下我能为你提供的最多的,我当然希望它能帮助你直到不起作用:也许我没有解释我自己,所以:每次用户看到的是一个活动,我不希望他再看到他。。。希望这将有助于编辑应该让你更接近你的最终目标,这是在这种情况下我能为你提供的最多的,我当然希望它有帮助