2017-05-16 15 views
0

私は、woocommerce_order_itemmetaテーブルのすべてのデータを取得して整理するwoocommerceのSQLクエリをまとめようとしています。Null値の行を返すSQLサブクエリ

私は重力フォームにハッシュ値をつかむために使用される同様のクエリに基づいて一緒に次の石畳:

SELECT order_item_id AS entryId, 
    (
     SELECT meta_value 
     FROM wp_woocommerce_order_itemmeta 
     WHERE meta_key = 'Name' 
      AND order_item_id = entryId LIMIT 1 
     ) AS 'Full Name', 
    (
     SELECT meta_value 
     FROM wp_woocommerce_order_itemmeta 
     WHERE meta_key = 'Email' 
      AND order_item_id = entryId LIMIT 1 
     ) AS 'User Email', 
    (
     SELECT meta_value 
     FROM wp_woocommerce_order_itemmeta 
     WHERE meta_key = 'Address' 
      AND order_item_id = entryId LIMIT 1 
     ) AS 'User Address' 
FROM wp_woocommerce_order_itemmeta 
WHERE meta_value IS NOT NULL 
GROUP BY entryId 
ORDER BY entryId 

そして、問題なく動作しているようです。私はMySQLを介してそれを実行し、私は必要な結果を得るが、私はまた、NULL値以外の行数を取得します。

前述のクエリを使用してNULLの値だけの行をフィルタリングする方法はありますか?

+1

where句でnullをチェックしていますが、これはすでにすべてを結合した後です。 meta_value IS NOT NULLをそれぞれの結合に追加すると、それを修正する必要があります。 mysqlにもっと賢い方法があるかどうかはわかりません。 –

+0

'where ...とentryIdがnullでない'を追加します。また、nullの 'entryId'を持つ複数の行を持つことはできません。サブクエリでは 'order_item_id = null'では厳密には不可能ですが、一部のシステムではそのルールを曲げます。 – shawnt00

+0

アドバイスありがとうございます。私は "meta_valueがnullではない"を各サブクエリに追加しようとしましたが、正常に実行されましたが、まだ多くのNULL行が返されています。私は名前、電子メール、アドレスなどがなく、_product_id、_line_subtotal、_line_totalなどの値しか含んでいないentryID行があるという事実と関連していることを発見しています。 _original_order_idでそれらをグループ化することができます。それは各注文の共通性のようです。 – gffwebdev

答えて

0

私は間違っているかもしれませんが、おそらくこのような構造のものがあなたのニーズに適しています。

SELECT oim.order_item_id AS entryId 
    , GROUP_CONCAT(DISTINCT CASE meta_key WHEN "Name" THEN meta_value ELSE NULL END) AS `Full Name` 
    , GROUP_CONCAT(DISTINCT CASE meta_key WHEN "Email" THEN meta_value ELSE NULL END) AS `User Email` 
    [, etc....] 
FROM wp_woocommerce_order_itemmeta AS oim 
GROUP BY entryId 
ORDER BY entryId 
; 

GROUP_CONCAT、ほとんどの集約関数と同様に、(結果が遭遇したすべての値がnullである場合にのみヌルになってきて)null値を無視します。

完全にヌルの結果をフィルタリングする場合は、あなたはHAVINGを探しています。

+0

ありがとう!私は、サブクエリを使用するよりも効率的な方法でデータをまとめる方法を模索してきました。 – gffwebdev

+0

テーブルに複数回参加することもできます( 'ON t1.order_item_id = t0.order_item_id AND t1.meta_key =" Blah1 "')が、サブクエリバージョンとほぼ同じくらい効率が悪いでしょう。 – Uueerdo

関連する問題