首先是一个数据库示例:
id, product_id, cat, name, value
--------------------------------
1,1,Algemeen,Processor,2 Ghz
2,1,Algemeen,Geheugen,4 GB
3,2,Algemeen,Processor,3 Ghz
4,2,Algemeen,Geheugen,4 GB
5,3,Beeldscherm,Inch,22"
6,3,Beeldscherm,Kleur,Zwart
7,3,Algemeen,Geheugen,3 GB
8,3,Algemeen,Processor,3 Ghz
我想用一个查询来选择跟随ID:1,2,3,4,7,8
因为这些产品的cat = algemeen和name = processor。 ID 5,6仅由产品3提供。
因此,必须选择所有产品(product_id)存在的条目(cat和name)。
该数据库包含80,000个条目,其中包含许多不同的猫,名称和值。
这可能是一个查询还是一些必要的PHP?我该怎么做呢?
我为糟糕的英语道歉。
答案 0 :(得分:0)
我认为你的意思是,显示所有product_ids中存在(cat,name)组合的所有记录,对吗?
select t.id, t.product_id, t.cat, t.name, t.value
from (
select cat, name
from tbl
group by cat, name
having count(product_id) = count(distinct product_id)
) p
join tbl t on t.cat = p.cat and t.name = p.name
答案 1 :(得分:0)
很难解释。当我看到查询结果时,我知道这是不是我的意思。
我忘了发布我用来显示所有项目的查询:
SELECT DISTINCT cat, name, value
FROM producten_specs
WHERE product_id IN (1,2,3)
ORDER BY cat,name,ABS(value) ASC
可以将此查询与您的查询结合起来。
答案 2 :(得分:0)
根据您对问题的描述,您需要一个SQL查询,它将获取cat
的值为'Algemeen'或product_id
的值为'Processor'的记录。如果是这种情况,我会使用此查询:
SELECT *
FROM producten_specs AS p
WHERE p.cat = "Algemeen" OR p.product_id = "Processor"
ORDER BY p.id
我注意到这个问题已经超过一年了。如果您在本网站上找到了您想要的答案,则应接受该答案,如果没有将问题标记为已关闭。
答案 3 :(得分:0)
<?php
$query = mysql_query("
select distinct p.cat, p.name, p.value
from producten_specs p
inner join (
select cat, `name`, count(*) as cnt
from producten_specs
where product_id in (".mysql_real_escape_string($product_ids).")
group by cat, `name`
having cnt = ".mysql_real_escape_string($product_ids_aantal)."
) c on p.cat = c.cat and p.`name` = c.`name`
where p.product_id in (".mysql_real_escape_string($product_ids).")
ORDER BY cat,name,ABS(value) ASC
");
?>