2017-03-01 96 views
0

我需要你帮忙,我有3个ORDERS,ORDER_ITEM,ORDER_ITEM_LINE。只选择前两项,并订购

CREATE TABLE orders 
(`id` int, `date` datetime) 
; 

INSERT INTO orders 
(`id`, `date`) 
VALUES 
(78, '2017-01-03 00:00:00'), 
(79, '2017-02-03 00:00:00'), 
(80, '2017-03-03 00:00:00'), 
(81, '2017-04-03 00:00:00'), 
(82, '2017-05-03 00:00:00'), 
(83, '2017-06-03 00:00:00'), 
(84, '2017-07-03 00:00:00') 

;

CREATE TABLE order_item 
(`id` int, `fk_o_id` int, `sku` int) 
; 

INSERT INTO order_item 
(`id`, `fk_o_id`, `sku`) 
VALUES 
(10, 78, 123), 
(11, 79, 124), 
(12, 79, 125), 
(13, 80, 126), 
(14, 82, 127), 
(15, 82, 128), 
(16, 82, 129) 
; 


CREATE TABLE order_item_line 
(`id` int, `fk_oi_id` int, `line_id` int) 
; 

INSERT INTO order_item_line 
(`id`, `fk_oi_id`, `line_id`) 
VALUES 
(33, 10, 1), 
(34, 11, 1), 
(35, 12, 2), 
(36, 13, 1), 
(37, 14, 1), 
(38, 15, 2), 
(39, 16, 3) 

;

我想有2个或2名以上的项目,但只显示所有订单前两个那么它将被line_id - 1和2

结果应该是这样的:

Outcome

如果您有任何想法,请提前致谢。

+0

节目表结构的文本格式 – denny

+0

请稍等片刻 – Bobby

+0

好吧,我知道,但请给表的一些文本格式,而不是像format.than我很容易为你做的 – denny

回答

0

要获得您需要的结果,您需要创建另一个表。在这个例子中,我创建了一个名为TESTQUERY和插入的数据表来计算订单ID多少次出现

创建表

CREATE TABLE TESTQUERY 
(`id` int, `count` int) 

数据导入测试表

INSERT INTO TESTQUERY 
(
SELECT o.id, COUNT(o.id) as count FROM orders o 
JOIN order_item oi ON oi.fk_o_id = o.id 
JOIN order_item_line oil ON oil.fk_oi_id = oi.id 
GROUP BY o.id 
) 

我当时对查询全部用于使用以下查询的数据库,并且它返回了您期望的结果

SELECT o.id, oi.sku, oil.line_id FROM orders o 
JOIN order_item oi ON oi.fk_o_id = o.id 
JOIN order_item_line oil ON oil.fk_oi_id = oi.id 
JOIN TESTQUERY t ON t.id = o.id 
WHERE t.count > 1 AND oil.line_id < 3 

我希望这有助于