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