0

我无法完全理解这个问题,所以我需要一些建议。

我有许多产品,我使用单独的表格为其分配了一些关键字。我想遍历这些关键字并生成包含相同关键字的其他产品列表...所以在下面的示例中,我有一个 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 字符串中并重新加载页面,随着网站的增长,这可能会成为更好的选择. 我认为这里吸取的教训是从你想要实现的目标中退后一步,并确保你正在做的事情是实现它的最佳方式。

4

2 回答 2

1

尝试使用IN而不是=

IE:

 ....
 where k2p.key_key_id IN ( 
 ....
于 2012-10-04T13:51:57.650 回答
1

您需要使用 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
于 2012-10-04T13:47:15.990 回答