簡體   English   中英

如何簡化以下SQL查詢?

[英]How can I simplify the following SQL query?

我有一個查詢可以完成我需要的所有內容,但它感覺很脆弱,而且非常復雜,我很樂意簡化它。 我認為這很復雜,因為需要將行數據轉換為元數據的列。

SELECT
  O.order_item_id,
  O.order_item_name,
  MAX(CASE WHEN OIM.meta_key = 'class' THEN OIM.meta_value END) AS 'class',
  MAX(CASE WHEN OIM.meta_key = 'fee-type' THEN OIM.meta_value END) AS 'fees',
  MAX(CASE WHEN OIM.meta_key = 'enrolment_id' THEN (
    SELECT firstname FROM wp_enrolments E WHERE OIM.meta_value=E.id) END) as 'name',
  MAX(CASE WHEN OIM.meta_key = 'enrolment_id' THEN (
    SELECT surname FROM wp_enrolments E WHERE OIM.meta_value=E.id) END) as 'surname',
  MAX(CASE WHEN OIM.meta_key = 'enrolment_Id' THEN (
    SELECT UM.meta_value
    FROM wp_usermeta UM, wp_enrolments E
    WHERE UM.meta_key='_user_phone'
    AND UM.user_id=E.memberid
    AND E.memberid=OIM.meta_value
    AND OIM.meta_key='enrolment_id' LIMIT 1) END) as 'phone',
  MAX(CASE WHEN OIM.meta_key = 'enrolment_id' THEN (
    SELECT U.user_email
    FROM wp_users U, wp_enrolments E
    WHERE U.id=E.memberid
    AND E.memberid=OIM.meta_value
    AND OIM.meta_key='enrolment_id' LIMIT 1) END) as 'email',
FROM wp_woocommerce_order_items O
INNER JOIN wp_woocommerce_order_itemmeta OIM ON O.order_item_id = OIM.order_item_id
GROUP BY O.order_item_id

考慮所有子查詢表的LEFT JOIN ,然后在CASE語句中使用這些列。 注意:沒有數據,這是未經測試的,可能需要調整,但可以幫助您重新考慮SQL查詢。 由於不同的連接字段( idmemberid ),需要兩個wp_enrolments連接:

SELECT
  O.order_item_id,
  O.order_item_name,
  MAX(CASE WHEN OIM.meta_key = 'class' THEN OIM.meta_value END) AS `class`,
  MAX(CASE WHEN OIM.meta_key = 'fee-type' THEN OIM.meta_value END) AS `fees`,
  MAX(CASE WHEN OIM.meta_key = 'enrolment_id' THEN idE.firstname END) as `name`,
  MAX(CASE WHEN OIM.meta_key = 'enrolment_id' THEN idE.surname END) as `surname`,
  MAX(CASE WHEN OIM.meta_key = 'enrolment_Id' AND UM.meta_key='_user_phone' THEN UM.meta_value END) as `phone`,
  MAX(CASE WHEN OIM.meta_key = 'enrolment_id' THEN U.user_email END) as `email`

FROM wp_woocommerce_order_items O
INNER JOIN wp_woocommerce_order_itemmeta OIM 
  ON O.order_item_id = OIM.order_item_id
LEFT JOIN wp_enrolments idE
  ON OIM.meta_value = idE.id
LEFT JOIN wp_enrolments memE
  ON OIM.meta_value = memE.memberid
  AND OIM.meta_key = 'enrolment_id'
LEFT JOIN wp_users U
  ON U.id = memE.memberid
LEFT JOIN wp_usermeta UM
  ON UM.user_id = memE.memberid

GROUP BY O.order_item_id,
         O.order_item_name

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM