2017-12-26 19 views
1

誰かがこの複雑なmysqlクエリで私を助けることができたのだろうかと思います。注文IDに基づいてすべての顧客のお支払いを取得

I 3つのテーブルを有する:

テーブル#1:Customer_Order二つの列customer_idorder_id
テーブル#2を有する:Ordersあるidを有する:Order_Paymentをもorder_id
テーブル#3を有しています注文ID。

order_idに基づいて、特定の顧客からのすべてのお支払いを取得できる場合は、私はさまよっていました。私はorder_idしか持っていませんが、私はcustomer_idを持っておらず、order_idに基づいて、私はすべての支払い、まだ支払われていないものさえも取り出せるはずです。

これは、私はそれを行う方法です。

私が最初に私が

select * from (
    select * from customer_order where order_id = 1351 
) c1 
left join 
    (select op.order_id, customer_id from order_payment op inner join customer_order co on op.order_id = co.order_id 
    ) c2 on c1.customer_id = c2.customer_id

返された内容に基づいて、私は、クエリを構築しよう

select * from customer_order where order_id = 1351

を知られている順序を取得します試してみてください

select customer_id from (
    select customer_id from `order_payment` inner join `customer_order` on `customer_order`.`order_id` = `order_payment`.`order_id` 
    where order_payment.order_id=1351 
    order by `created_at` asc) as s 
inner join customers on s.customer_id = customers.id

しかし、私はちょうど1つの注文の支払いをしていないものを支払っていない。

誰かが問題を解決するのに役立つと感謝します。このような

+0

どのように出力を見たいですか? –

+0

私はまっすぐなSQLクエリをスキップし、代わりにLaravelのEloquentとリレーションシップを利用します。 – aynber

+0

https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-クエリ – Strawberry

答えて

0

何か作業をする必要があります:

SELECT 
    co.*, 
    op.* 
FROM 
    customer_order AS co 
    LEFT JOIN order_payment AS op ON op.order_id = co.order_id 

WHERE 
    co.customer_id IN 
    (
     SELECT customer_id FROM customer_orders WHERE order_id=1351 
    ) 
+0

私はクエリを試しましたが、1回の注文支払いのみを取得しました。私が必要としたのは、支払われた未払いの注文を得ることです。同じ顧客から10件の注文があり、1件しか支払われなかった場合は、1件が支払われ、9件が未払いとなっています。 –

+0

すべての注文(支払いをしているかどうかにかかわらず)、お支払い情報がある場合は支払い情報ですか?変更されたクエリを試します。 – StormoPL

0

あなたが二回customer_orderに参加することができます。一度指定されたorder_idからcustomer_idに移動すると、2回目にすべての顧客の注文を取得します。

select op.* 
FROM order_payment AS op 
JOIN customer_order AS co1 ON co1.order_id = op.order_id 
JOIN customer_order AS co2 ON co2.customer_id = co1.customer_id 
WHERE co2.order_id = 1351 

LEFT JOINを使用する理由はありません。 order_paymentの列は外部キーである必要があります。したがって、常に一致します。

+0

私はクエリを試してみましたが、1つの注文支払いのみを取得します。私が必要としたのは、支払われた未払いの注文を得ることです。同じ顧客から10件の注文があり、1件しか支払われなかった場合は、1件の支払いと9件の未払いが表示されます。 –

+0

質問には、**特定の顧客からのすべての支払いを取得する**と表示されます。未払いの注文にはどのように支払いがありますか? – Barmar

0

2つのクエリが実行されました。最初に特定の注文の支払いを完了した顧客をロードし、その顧客の未払いの注文を読み込みます。

ありがとうございました。

関連する問題