2012-02-24 9 views
1

私はExcelにエクスポートするための行の束を選択してフォーマットする大きな巨大なSQLクエリを持っています。そして、私はRID(ロールID)がそうでない場合は現在MySQL IFステートメント?

SELECT uc_orders.billing_first_name AS 'First Name', uc_orders.billing_last_name AS 'Last 
Name', users.name AS 'Username', uc_orders.billing_street1 AS 'Address', 
uc_orders.billing_city AS 'City', uc_zones.zone_name AS 'State',uc_orders.billing_postal_code 
AS 'Postal Code', ROUND(uc_orders.order_total,2) AS 'Order Total' FROM uc_orders, users, 
uc_zones WHERE uc_orders.uid!='0' AND uc_orders.uid = users.uid AND uc_orders.billing_zone = 
uc_zones.zone_id AND uc_orders.modified BETWEEN '1271124575' AND '1274978899' 
役割2.

MySQLのクエリのようにそれを設定し、その後のロール1とし、それを設定3を存在している場合は、ほとんどが1つのより多くの役割を追加します

ただし、ユーザーがusers_roleデータベースに常に存在するわけではありません(3またはその他の数字の場合のみ存在します。通常は存在しません)。したがって、それが存在しなければ、「ロール2」も返されます。私は、MySQLでこれを行うことができますどのように

ので

IF users.uid EXISTS IN users_role.uid THEN 
    IF users_role.uid EQUALS users.uid AND users_role.rid = 3 
     THEN 
     return 'Role 1' 
     ELSE 
     return 'Role 2'; 
    ELSE return 'Role 2'; 

?あるいは、PHPは唯一の方法でしょうか?

+2

質問タイトルを修正してください。あなたの質問を説明するようにしてください。 –

+3

どうしますか? MySql StatementでIF文を実行したいのですか? – Steven

+0

タイトルには、(a)広く使われている技術と(b)信じられないほど一般的な機能があります。他の質問から目立たせるものは何もありません。この質問が他の質問と異なる方法を特定するものはありません。あなたと同じ問題があった場合、解決策を見つけるためにこれを使用することはできません。 。あなたは同様に "コンピュータの質問" –

答えて

4

あなたは、マルチテーブル・クエリのためのJOINを使用する必要があります。また、簡単な読み込みのために、クエリの書式設定やエイリアスの使用を検討してください。あなたの実際の質問に答える

SELECT 
    `a`.`billing_first_name` as `First Name`, 
    `a`.`billing_last_name` as `Last Name`, 
    `b`.`name` as `Username`, 
    `a`.`billing_street1` as `Address`, 
    `a`.`billing_city` as `City`, 
    `c`.`zone_name` as `State`, 
    `a`.`billing_postal_code` as `Postal Code`, 
    ROUND(`a`.`order_total`,2) as `Order Total`, 
    IF(`d`.`rid` IS NOT NULL AND `d`.`rid`=3,'Role 1','Role 2') as `Role` 
FROM `us_orders` as `a` 
JOIN `users` as `b` ON `a`.`uid`=`b`.`uid` 
JOIN `uc_zones` as `c` ON `a`.`billing_zone`=`c`.`zone_id` 
LEFT JOIN `users_role` as `d` on `a`.`uid`=`d`.`uid` 
WHERE `a`.`modified` BETWEEN '1271124575' AND '1274978899' 

部分はIFとラインとLEFT JOINを有するものです。

1

CASE文を使用してください。 CASEステートメントのCASE(rid) WHEN 3 THEN 'Role 1' ELSE 'Role 2' END;

情報がhere

-- Kolinks SQL using a CASE statement 
    SELECT 
     `a`.`billing_first_name` as `First Name`, 
     `a`.`billing_last_name` as `Last Name`, 
     `b`.`name` as `Username`, 
     `a`.`billing_street1` as `Address`, 
     `a`.`billing_city` as `City`, 
     `c`.`zone_name` as `State`, 
     `a`.`billing_postal_code` as `Postal Code`, 
     ROUND(`a`.`order_total`,2) as `Order Total`, 
     CASE (`d`.`rid`) WHEN 3 THEN 'Role 1' ELSE 'Role 2' END; as `Role` 
    FROM `us_orders` as `a` 
    JOIN `users` as `b` ON `a`.`uid`=`b`.`uid` 
    JOIN `uc_zones` as `c` ON `a`.`billing_zone`=`c`.`zone_id` 
    LEFT JOIN `users_role` as `d` on `a`.`uid`=`d`.`uid` 
    WHERE `a`.`modified` BETWEEN '1271124575' AND '1274978899' 
関連する問題