2013-04-08 3 views
0

Итак, у меня есть 3 таблицы mysql, где мне нужно извлечь данные. Все, что связано с объединениями, заставляет меня застрять!MYSQL выбрать результаты из 3 таблиц с массивом идентификаторов

Таблица 1 = продукты (ProductID, имя)

Таблица 2 = категория (CategoryID, имя)

Таблица 3 = categoryproduct (CategoryID, ProductID) - мой Join Table

У меня есть массив идентификаторов продуктов, которые мне нужны, чтобы получить случайный выбор продуктов, которые попадают в те же категории, что и эти продукты.

Идея заключается в том, что результаты запроса будут отображаться раздел в моей корзине аналогичных/продуктов, связанных, что клиент может нравится

Так что-то вроде

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

Если я правильно понял вашу проблему, этот запрос может помочь. Здесь вместо подзапроса вы можете указать строку, разделенную запятой, которая содержит 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() 
Смежные вопросы