【问题标题】:Select where a value present选择存在值的位置
【发布时间】:2011-06-29 17:40:14
【问题描述】:

首先是一个数据库示例:

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 = 处理器由这些产品组成。 ID 5,6 仅出现在产品 3 中。

因此,必须选择所有产品 (product_id) 中存在的条目 (cat 和 name)。

该数据库包含 80.000 个条目,其中包含许多不同的猫、名称和值。

这可以通过一个查询实现还是需要一些 php?我该怎么做呢?

我为糟糕的英语道歉。

【问题讨论】:

    标签: php sql mysql database select


    【解决方案1】:

    我认为您的意思是,显示所有产品 ID 中存在 (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
    

    【讨论】:

      【解决方案2】:

      很难解释。当我看到查询结果时,我知道这是否是我的意思。

      我忘记发布用于显示所有项目的查询:

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

      可以将此查询与您的查询结合起来。

      【讨论】:

        【解决方案3】:

        根据您对问题的描述,您需要一个 SQL 查询来获取 cat 的值为“Algemeen”或 product_id 的值为“处理器”的记录。如果是这种情况,我会使用这个查询:

        SELECT *
          FROM producten_specs AS p
          WHERE p.cat = "Algemeen" OR p.product_id = "Processor"
          ORDER BY p.id
        

        我确实注意到这个问题已经有一年多了。如果您在本网站上找到了您想要的答案,您应该接受它,如果没有则标记问题已关闭。

        【讨论】:

          【解决方案4】:
          <?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 
          "); 
          ?>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-05-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多