[英]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.