MYSQL过滤器产品通过属性
如何选择具有由用户指定的所有属性的产品MYSQL过滤器产品通过属性
例如:指定用户属性来搜索产品:41,2,4,6
MYSQL结构是:
表:报价
`id` int(11) NOT NULL auto_increment,
`title_pl` varchar(100) character set utf8 collate utf8_polish_ci NOT NULL,
表:offer_att
`id` int(11) NOT NULL auto_increment,
`offer_id` int(11) NOT NULL,
`att_id` int(11) NOT NULL,
表ATT
`id` int(11) NOT NULL auto_increment,
`title_pl` varchar(255) character set utf8 collate utf8_polish_ci NOT NULL,
如果你想获取仅具有所有4个属性(41,2,4,6)报价在一起,然后如果你想获取该至少有一个报价,你应该使用一个查询
SELECT
o.id
o.title_pl
FROM
offer o INNER JOIN offer_att oa ON o.id = oa.offer_id AND oa.att_id IN (41,2,4,6)
GROUP BY o.id
HAVING COUNT(DISTINCT oa.att_id) = 4
的属性(41或2或4或6)用这一个:
SELECT
o.id
o.title_pl
FROM
offer o INNER JOIN offer_att oa ON o.id = oa.offer_id AND oa.att_id IN (41,2,4,6)
PHP代码来生成对您的SQL查询参数:
<?php
$attributes = array(41, 2, 4, 6);
$count = count($attributes);
$list = implode(',', $attributes);
$query = '
SELECT
o.id
o.title_pl
FROM
offer o INNER JOIN offer_att oa ON o.id = oa.offer_id AND oa.att_id IN (' . $list . ')
';
$db->query($query);
?>
好。但如果产品没有属性6(有onli 41,2,4)将被列出并且不应该是 – jasne 2013-04-09 11:27:56
如果您使用php,您可以使用'count($ attributes)'来获得**'4'**和' implode(',',$ attributes)'获得**'41,2,4,6'**字符串。 然后,您必须将这些字符串放在查询中的正确位置。 – 2013-04-09 11:29:38
我还没有理解你的评论 – 2013-04-09 11:31:01
ç你给出样本数据和输出? – 2013-04-09 11:07:49
定义这'具有用户指定的所有属性' – 2013-04-09 11:08:52
你为什么要标记它的PHP? – ITroubs 2013-04-09 11:09:45