Mysql 匹配in子句中的所有值

Mysql 匹配in子句中的所有值,mysql,sql,yii,Mysql,Sql,Yii,是否有办法确保子句中的中的所有值都匹配 例如: 我可以在as中使用:IN(5,6,7,8) 我需要它像一样跨多行工作 更新: 我需要从db中列出符合指定参数的公司。公司和分类法是多对多关系。我正在使用Yii框架。这是我的控制器的代码: public function actionFilters($list) { $companies = new CActiveDataProvider('Company', array( 'criteria' => array(

是否有办法确保子句中的
中的所有值都匹配

例如:

我可以在as中使用:
IN(5,6,7,8)

我需要它像
一样跨多行工作

更新: 我需要从db中列出符合指定参数的公司。公司和分类法是多对多关系。我正在使用Yii框架。这是我的控制器的代码:

public function actionFilters($list)
{
    $companies = new CActiveDataProvider('Company', array(
        'criteria' => array(
            'condition'=> 'type=0',
            'together' => true,
            'order'=> 'rating DESC',
            'with'=>array(
            'taxonomy'=>array(
                'condition'=>'term_id IN ('.$list.')',
                )
            ),
        ),
    ));
    $this->render('index', array(
        'companies'=>$companies,
    ));
}

您可以这样做:

select ItemID
from ItemCategory
where CategoryID in (5,6,7,8) <-- de-dupe these before building IN clause
group by ItemID
having count(distinct CategoryID) = 4 <--this is the count of unique items in IN clause above
选择ItemID
来自ItemCategory

(5,6,7,8)中的什么类别?如果我不知道这个数字怎么办?@DimaKnivets在什么情况下你不会知道它?这类查询需要动态创建request@DimaKnivets解析querystring参数并拆分unqiue条目,然后使用这些条目在
子句中创建参数化的
,项目计数用于创建
HAVING
子句。
HAVING count(distinct CategoryID)
条件是完美的+1你想要什么结果?是一个布尔运算符;你想让它与数字列表有什么关系?不确定你在这里要的是什么。当在WHERE子句中使用IN时,将为您提供字段值与其中一个值匹配的所有行。一个文件不可能有所有这些值,所以我不知道;我不知道从这个理论上的AND()函数中寻找什么。我正在使用它根据条件列出db中的行。此标准是分类ID的列表。有什么替代方案?需要@RPM引文。我认为您可能混淆了IN在子查询中的用法,这很慢,因为子查询将针对每个记录运行。在常量列表中使用IN从来没有任何问题;如果有什么我期望的,它会更快。将
HAVING COUNT(CategoryID)
更改为
HAVING COUNT(DISTINCT CategoryID)
将有助于防止在其中一个值出现两次时出现假阳性(如上面RedFilter的回答)。
 SELECT ItemID
     FROM ItemCategory
        WHERE (
               (CategoryID = 5) OR 
               (CategoryID = 6) OR 
               (CategoryID = 7) OR 
               (CategoryID = 8)
              )
     GROUP BY ItemID
 HAVING COUNT(DISTINCT CategoryID) = 4