Php 使用zend框架的SQL查询逻辑
所以,我在逻辑方面的情况有点糟糕,我的数学也不太好, 因此,我需要您帮助构建一个查询,通过join查询从3个不同的表中获取信息。 我的结构是这样的: 用户表:具有主键ID 活动表:具有主键ID 用户活动表:具有用户id和活动id行。 我想提取用户id为X的user_campaign表中不存在的所有活动 我的查询是针对zend framework的。 我将感谢任何形式的帮助,thanx,以色列的晚上好 我当前的查询: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()
$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');
再次感谢各位!
你真棒 至少做点努力。我真的很努力,超过一个半小时,我的逻辑感真的很差,我发誓!你能把你所做的事贴出来吗?即使这很糟糕,它也会激励人们帮助你,而不是为你做你的工作,至少要做出一些努力。我真的真的很努力,超过一个半小时,我的逻辑感真的很糟糕,我发誓!你能把你所做的事贴出来吗?即使这很糟糕,它也会激励人们帮助你,而不是为你做你的工作仍然不起作用:也许我没有解释我自己,所以:每次用户看到的是一个活动,我不想让他再看到他。。。希望这将有助于编辑让你更接近你的最终目标,这是在这种情况下我能为你提供的最多的,我当然希望它能帮助你直到不起作用:也许我没有解释我自己,所以:每次用户看到的是一个活动,我不希望他再看到他。。。希望这将有助于编辑应该让你更接近你的最终目标,这是在这种情况下我能为你提供的最多的,我当然希望它有帮助