2017-04-27 1552 views
-1

enter image description here如何使用不等于查询在Yii2

我有两个表ad_pool和广告。 ad_pool有一些数据,而广告是空的。我使用这段代码从第一个表中选择不等于这个和这个(''','fisttablekey','second_tbl_key'])的查询。这是我用来检索数据的完整代码,我也上传了图像。

$pool1 = (new Query())>select('p.id,p.cleaner_user_id,p.ad_place_id') 
        ->from('ad_pool p') 
        ->innerJoin('advertisment a' , 'p.id = a.pool_id') 
       ->where(['=','ad_place_id',1]) 
       ->andWhere(['<>','p.id','a.pool_id']) 
       ->orderBy(new Expression('rand()')) 
       // ->limit(1) 
       ->all(); 
        var_dump($pool1); 
        exit(); 

这回我空数组。需要你的帮助。提前致谢。

+1

用'createCommand() - > rawSql'替换'all()'并在数据库控制台中运行它的输出以查看是否得到任何结果。 – Bizley

+0

它给了我这个错误...语法错误,意外的'返回'(T_RETURN) –

回答

2

INNER JOIN关键字选择两个表中具有匹配值的记录。 由于你的广告是空的,它不会返回任何数据。您可以改用LEFT JOIN。

$pool1 = (new Query())>select('p.id,p.cleaner_user_id,p.ad_place_id') 
        ->from('ad_pool p') 
        ->leftJoin('advertisment a' , 'p.id = a.pool_id') 
       ->where(['=','ad_place_id',1]) 
       ->andWhere(['<>','p.id','a.pool_id']) 
       ->orderBy(new Expression('rand()')) 
       ->all(); 

W3Schools Reference

+0

你有没有尝试过使用活动记录?包括一个方法getAdvertisements() –

+0

是的,这是问题所在。我想从第一个表中检索数据,但需要检查其ID是否已经存在,然后忽略该数据。我怎样才能做到这一点?你能否为我提供任何解决方案 –

+0

nope我没有试过。 –

0

This way i solved this problem after whole day search

这样我解决后3〜4小时勤劳这个问题。从第二个表中获取所需的值(如果存在),然后将其转换为单个数组并在NOT IN条件下使用它。 (我们必须热衷于帮助别人,我们应该互相帮助)。