私は持っていてオーダーテーブルからお客様のショッピングカート。これは典型的な顧客名、住所などのフィールドの一覧です。これは、顧客が請求情報と異なる出荷情報を入力したときにカートが適切なフィールド(shipName、shipAddress、ShipStateなど)に配送情報を入力するということです。しかし、顧客が自分自身に出荷する場合、カートは出荷情報を出荷のための適切なフィールド(すなわちshipName、shipAddress、shipState)に移動させない。この情報はordName、ordAddress、ordCityなどのフィールドに保持され、出荷関連のフィールドは空のままになります。mySQLクエリの質問
したがって、これらの出荷項目は、顧客が出荷する注文の場合は空です。私はIFコマンドを使用して、出荷情報が提供されていないときにordName、ordAddrなどをエイリアス名に移動しました。これにより、すべての注文タイプ(顧客が別の住所に出荷されたかどうか)の出荷情報が処理されます。その部分は下のクエリで正常に動作しています。
1つの問題が残ります。配送プログラムで長い州名(ミシガン、ニューヨークなど)を使用することはできません。状態は2文字の略語(例えば、MI、NY)である必要があります。 * STATESというルックアップテーブルがあり、ロングステート名と2文字の省略形の間のマッピングがあります。 ShipStateエイリアスを使用して、特定の状態の正しい2文字の名前を検索しようとしています。私はJOINとしてこれをやろうとしましたが、エラーが続いています。私は使用していた結合を削除し、現在正しく動作するコードを表示していますが、状態の省略形のマッピングは行いません。誰かが助けてくれますか?
SELECT
orders.ordDate AS `Date`,
orders.ordID AS Order_ID,
orders.ordEmail AS Email,
IF(ordShipName = ' ', ordName, ordShipName) AS Name,
IF(ordShipAddress = ' ', ordAddress, ordShipAddress) AS Address_1,
IF(ordShipAddress2 = ' ', ordAddress2, ordShipAddress2) AS Address_2,
IF(ordShipCity = ' ', ordCity, ordShipCity) AS City,
IF(ordShipState = ' ', ordState, ordShipState) AS ShipState,
IF(ordShipZip = ' ', ordZip, ordShipZip) AS Postal,
IF(ordShipCountry = ' ', ordCountry, ordShipCountry) AS Country,
IF(ordShipPhone = ' ', ordPhone, ordShipPhone) AS Phone,
FROM
orders
WHERE
orders.ordID > 21700
HAVING
Country = 'United States of America'
壊れたSQLを投稿してください。 – SenorPuerco
また、単なる提案です。データがないときにordShipName、ordShipAddress列がNULLに設定され、MySQL関数ifnull()を使用するように変更できますか?それは多くのクリーナーになるようです。 http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_ifnull – SenorPuerco
しかし、カートは購入した商品であり、カートのデータを変更することには消極的です私がカートを更新するときはいつでも、構造を変更する必要があります。 – Alan