MYSQL从3个带有一组id的表中选择结果

时间:2013-04-08 03:54:02

标签: mysql

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

表1 =产品(productid,name)

表2 =类别(categoryid,name)

表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

我该怎么写?

2 个答案:

答案 0 :(得分: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';

答案 1 :(得分:0)

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

    select p.name
    from products p,categoryproduct cp
    where p.productid=cp.productid
    and cp.categorid in(
    select categoryid 
    from cartitems)
    order by RAND()