选择值存在的位置

时间:2011-02-18 10:27:34

标签: php sql mysql database select

首先是一个数据库示例:

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?我该怎么做呢?

我为糟糕的英语道歉。

4 个答案:

答案 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 
"); 
?>