繁体   English   中英

SQL - 使用子查询返回多个行

[英]SQL - Returning a number of rows using a sub-query

我不能完全理解这个,所以我需要一些建议。

我有许多产品,我使用单独的表分配了一些关键字。 我想迭代这些关键字并生成包含相同关键字的其他产品的列表......所以在下面的示例中,我有一个ID为149的产品,其中分配了两个关键字,但是我的SQL只会使用一个关键字处理产品。

所以我无法理解的是我如何利用这两个关键词制作产品清单。 任何帮助都会很棒。

SQL: -

 $products_id = $_GET['products_id'];
 $slideQuery = mysql_query("

 select p.products_id, p.products_image, p.products_price, 
 pd.products_name, k2p.key_key_id  

 from products p

 join products_description pd on 
 pd.products_id = p.products_id 

 join products_keyword_to_product k2p on 
 k2p.products_id = p.products_id 

 where k2p.key_key_id = (
      select key_key_id  
  from
  products_keyword_to_product
  where 
  products_id=" . $products_id ."
      )  

  group by p.products_id 
  order by p.products_price desc 
  limit 12

编辑添加:我之前通过使用php while循环并在此循环中查询数据库实现了这一点,但我确信必须有更好的方法来执行此操作。

更新:我查看了从这个问题收到的建议,但我的查询无法完成。 此时它有点超出我的“工资等级”所以我选择创建一个链接,将相关的ID传递到URL字符串并重新加载页面,随着网站的增长,可能会成为更好的选择。 我认为从这里学到的教训是退出你想要实现的目标,并确保你的方式是实现它的最佳方式。

你想用GROUP BY和HAVING做这件事。

select p.products_id,
    p.products_image,
    p.products_price,
    pd.products_name,
    k2p.key_key_id
from products p
inner join (
    select products_id
    from products_keyword_to_product
    where key_key_id in (
        select key_key_id
        from products_keyword_to_product
        where products_id = " . $products_id ."
    )
    group by products_id
    having count(distinct key_key_id) = (
        select count(distinct key_key_id)
        from products_keyword_to_product
        where products_id = " . $products_id ."
    )
) pm on p.products_id = pm.products_id
inner join products_keyword_to_product k2p on k2p.products_id = p.products_id
inner join products_description pd on pd.products_id = p.products_id
order by p.products_price desc 
limit 12

尝试使用IN而不是=

即:

 ....
 where k2p.key_key_id IN ( 
 ....

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM