我无法理解这一点,所以我需要一些建议。
我有许多产品,我使用单独的表分配了一些关键字。我想迭代这些关键字并生成包含相同关键字的其他产品的列表......所以在下面的示例中,我有一个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字符串并重新加载页面,随着网站的增长,可能会成为更好的选择。 我认为这里学到的教训是退出你想要实现的目标,并确保你做到这一点的方式是实现它的最好方法。
答案 0 :(得分: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
答案 1 :(得分:1)
尝试使用IN
代替=
即:
....
where k2p.key_key_id IN (
....