2012-04-29 2 views
1

Я хочу, чтобы выбрать наиболее купленные предметы из таблицы orderitems, а затем получить детали этих элементов и сортировки по убываниюКак получить записи из двух таблиц вместе с count?

У меня есть следующее, который возвращает наиболее купленные предметы, но я не могу понять, как вернуть p_namep_price и p_image_path каждого пункта (p_id) из products таблицы

SELECT  p_id 
     , COUNT(p_id) AS p_id_count 
FROM  orderitem 
GROUP BY p_id 
ORDER BY p_id_count $direction 

Я надеюсь, что это имеет смысл

ответ

2
SELECT o.p_id, COUNT(o.p_id) AS p_id_count, p.p_name, p.p_price, p.p_image_path 
FROM orderitem o 
INNER JOIN products p ON o.p_id = p.p_id 
GROUP BY o.p_id 
ORDER BY p_id_count 
0
SELECT p_id, p_name, p_price, p_image_path, COUNT(p_id) AS p_id_count 
FROM orderitem 
inner join products p on p.id = p_id 
GROUP BY p_id 
ORDER BY p_id_count $direction 
0

Yo Вам необходимо присоединиться к таблице продуктов с помощью таблицы orderitem.

SELECT p_id, p_name, p_price, COUNT(p_id) AS p_id_count 
    FROM orderitem 
    LEFT JOIN products ON (orderitem.p_id = products.id) 
    GROUP BY p_id, p_name, p_price 
    ORDER BY p_id_count $direction 
0
SELECT p_id, COUNT(p_id) AS p_id_count 
     FROM orderitem o, products p 
     WHERE o.p_id = p.p_id 
     GROUP BY p_id 
     ORDER BY p_id_count $direction 
1

Я предполагаю, что первичный ключ продукта идентификатор и который имеет отношение с p_id из OrderItem

SELECT o.p_id, COUNT(o.p_id) AS p_id_count, p.p_name,p.p_price,p.p_image_path 
     FROM orderitem o 
    INNER JOIN products p ON p.id = o.p_id 
     GROUP BY o.p_id 
     ORDER BY o.p_id_count $direction 
2

Вы должны использовать INNER JOIN между продукты и orderitem таблицы в поле * p_id *, потому что это общее поле, связывающее обе таблицы. INNER JOIN будет извлекать только совпадающие записи между двумя таблицами. Соединение будет соответствовать всем соответствующим записям, так как значения ordereditem уже сгруппированы по столбцу * p_id *, вы увидите всю уникальную информацию о продукте из таблицы продуктов вместе с количеством заказов на основе вывода информации COUNT (p_id).

Click here to view the demo at SQL Fiddle.

Script:

CREATE TABLE products 
(
    p_id   INT NOT NULL 
    , p_name   VARCHAR(20) NOT NULL 
    , p_image_path VARCHAR(255) NOT NULL 
); 

CREATE TABLE orderitem 
(
    orderid INT NOT NULL 
    , p_id INT NOT NULL 
); 

INSERT INTO products (p_id, p_name, p_image_path) VALUES 
    (1, 'product 1', '~\image 1'), 
    (2, 'product 2', '~\image 2'), 
    (3, 'product 3', '~\image 3'); 

INSERT INTO orderitem (orderid, p_id) VALUES 
    (1, 2), 
    (1, 1), 
    (1, 3), 
    (1, 2), 
    (1, 2), 
    (1, 1); 

SELECT  p.p_id 
     , p.p_name 
     , p.p_image_path 
     , COUNT(o.p_id) AS orderedcount 
FROM  products p 
INNER JOIN orderitem o 
ON   p.p_id = o.p_id 
GROUP BY p.p_id 
ORDER BY orderedcount DESC; 

Выход:

P_ID P_NAME  P_IMAGE_PATH ORDEREDCOUNT 
---- ---------- ------------ ------------ 
2 product 2 ~image 2   3 
1 product 1 ~image 1   2 
3 product 3 ~image 3   1 
Смежные вопросы