[英]MySQL IF Statement?
我有一個很大的大型sql查詢,在其中選擇並格式化一堆行以導出到Excel。 我想再添加一個角色,如果已刪除(角色ID)EXISTS和IS 3,則將其設置為Role 1,否則將其設置為Role 2。
當前的mysql查詢
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'
但是用戶將永遠不會存在於users_role數據庫中(僅當它為3或其他一些數字時才存在,通常不會存在)。 因此,如果它不存在,它還將返回“角色2”;
所以
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';
如何在MySQL中做到這一點? 還是PHP是唯一的方法?
您應該對多表查詢使用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
。
使用CASE語句。 CASE(rid) WHEN 3 THEN 'Role 1' ELSE 'Role 2' END;
有關CASE語句的信息可以在這里找到
-- 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'
是的,有一個IF語句。 還有一個IF()函數。 這是IF語句的MySQL參考頁:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.