2016-03-04 29 views
0

我试图获得匹配IN子句中所有值的查询。这就是我现在所拥有的在UsersSearch.php模型:Yii2匹配IN子句中的所有值

$categoryIdsMatching = UsersCategoriesAssn::find() 
     ->select('userID') 
     ->distinct(true) 
     ->joinWith('userCategory') 
      ->andWhere(['IN', 'usersCategories.id', $this->catNameSearch]) 
     ->column(); 
    $query->andWhere(['userID'=>$categoryIdsMatching]); 

但它变得匹配值的至少一个记录...我怎么能设置andWhere子句,匹配,而不是一些人的所有值?

+1

这就是使用[MySQLs IN Operator](http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_in)时的原理。除了必须匹配所有值的一个值听起来不正确。你为什么不比较一个价值(如果他们都一样)?请说明你的用例。 – abi

+0

谢谢你的回答@abi。我有一个多选择的下拉列表,我想要获得匹配所有选定值的记录 – farrusete

+1

因此,您有多个类别ID,并且想要查找完全属于这些类别的所有用户,对不对?您可以尝试使用简单的'='运算符对每个类别进行连接,然后对具有NULL值的结果进行整理。 – abi

回答

0

这可能是类似的东西来:

$categoryIdsMatching = UsersCategoriesAssn::find() 
    ->select('userID') 
    ->distinct(true) 
    ->joinWith('userCategory') 
     ->andWhere(['IN', 'usersCategories.id', $this->catNameSearch]) 
     ->groupBy('userTable.userID') 
     ->having('COUNT(userTable.userID) ='.count($this->catNameSearch)); 

有propably没有其他办法来筛选操作员在MySQL匹配所有值。

+0

非常感谢你@ krzysztof-gał。这样可行 :) – farrusete