0

好的,所以我有 3 个需要从中提取数据的 mysql 表。任何与连接有关的事情都会让我陷入困境!

表 1 = 产品(productid、名称)

表 2 = 类别(类别 ID、名称)

表 3 = categoryproduct(categoryid, productid) - 我的连接表

我有一系列产品 ID,我需要随机选择与这些产品属于同一类别的产品。

这个想法是查询的结果将在我的购物车中显示客户可能喜欢的类似/相关产品的部分

所以像

SELECT name etc FROM table1
WHERE table2.categoryid of results of the query = table3.categoryid of current products
ORDER BY RAND()
LIMIT 3

我怎么写??

4

2 回答 2

1

假设您使用的是 PHP,以下方法将从数据库中获取 10 个相关产品。

$productids = array(1002,789,999,203,321);

$sql = '
    SELECT * FROM 
    products p JOIN categoryproduct pc
        ON p.productid = pc.productid
    WHERE pc.categoryid IN(
        SELECT DISTINCT(categoryid) FROM 
        products inner_p JOIN categoryproduct inner_pc
            ON inner_p.productid = inner_pc.productid
        WHERE inner_p.productid IN('.implode(',',$productids).')
    )
    ORDER BY RAND()
    LIMIT 10';
于 2013-04-08T06:32:44.713 回答
0

如果我正确理解了您的问题,那么此查询可能会有所帮助。在这里,您可以使用逗号分隔的字符串代替子查询,其中包含用户选择的不同产品的类别 ID。

    select p.name
    from products p,categoryproduct cp
    where p.productid=cp.productid
    and cp.categorid in(
    select categoryid 
    from cartitems)
    order by RAND()
于 2013-04-08T04:02:53.100 回答