2013-04-08 51 views
0

好的,所以我有3个MySQL表,我需要从中提取数据。任何与连接有关的事情都会让我卡住!MYSQL从3个表中选择结果数组ids

表1 =产品(产品ID,姓名)

表2 =类别(类别ID,姓名)

表3 = categoryproduct(类别ID,产品ID) - 我的连接表

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

的想法是,查询的结果将显示在我的同类/相关产品购物车一节,客户可能喜欢

因此,像

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

我怎么写? ?

回答

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'; 
0

如果我已经正确理解你的问题,那么这个查询可能会有所帮助。在这里,不是子查询,而是可以给逗号分隔的字符串,其中包含由用户选择的不同产品的分类标识。

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