2011-02-18 31 views
2

首先一個數據庫的例子:選擇其中一個值目前

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

因爲貓= algemeen和這些產品的名稱=處理器。 ID 5,6僅由產品3存在。

因此,必須選擇所有產品(product_id)存在的條目(貓和名稱)。

該數據庫包含80.000條目,其中包含很多不同的貓,名稱和值。

這是可能的一個查詢或是一些PHP的必要?我該怎麼做呢?

我對壞英語表示歉意。

回答

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

我想你的意思是,顯示所有的記錄(貓,名稱)的組合存在於所有的product_ids中,對嗎?

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 
0

這很難解釋。當我看到查詢的結果時,我知道這是我的意思。

我忘記而我使用顯示所有項目查詢:

SELECT DISTINCT cat, name, value 
    FROM producten_specs 
    WHERE product_id IN (1,2,3) 
    ORDER BY cat,name,ABS(value) ASC 

很可能這個查詢與你結合。

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 

我注意到這個問題已經過了一年多了。如果你在這個網站上找到你想要的答案,你應該接受它,如果不是標記問題關閉。

相關問題