Выберите, где значение присутствует - PullRequest
2 голосов
/ 18 февраля 2011

Первый пример базы данных:

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

Я хочу одним запросом выбрать следующие идентификаторы: 1,2,3,4,7,8

Потому что кошка = algemeen и имя = процессор по этим продуктам. ID 5,6 присутствуют только в продукте 3.

Таким образом, необходимо выбрать запись (cat и name), которая присутствует во всех продуктах (product_id).

База данных содержит 80 000 записей с большим количеством различных имен, имен и значений.

Возможно ли это одним запросом или нужен какой-то php? Как мне это сделать?

Мои извинения за плохой английский.

Ответы [ 4 ]

0 голосов
/ 21 ноября 2012
<?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 голосов
/ 18 февраля 2011

Сложно объяснить. Когда я вижу результаты запроса, я знаю, имею ли это в виду.

Я забыл опубликовать запрос, который я использую, чтобы показать все элементы:

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

Возможно объединить этот запрос с вашим.

0 голосов
/ 01 мая 2012

Исходя из вашего описания проблемы, вы хотите запрос 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

Я заметил, что этому вопросу больше года.Если вы нашли нужный ответ на этом сайте, вы должны принять его, если не пометьте вопрос закрытым.

0 голосов
/ 18 февраля 2011

Я думаю, вы имеете в виду, показать ВСЕ записи, где комбинация (кошка, имя) присутствует во ВСЕХ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...