2010-03-05 85 views
2

我正在使用MYSQL和PHP。我有一个称为物品的表格。它的两个属性是价格和折扣price.I有SELECT语句如下:SQL中的条件表达式

$sql = 
'SELECT C.cart_id,I.item_id,C.quantity, I.discounted_price,I.price 
FROM cart C, item I 
WHERE I.item_id = C.item_id'; 

我想修改该SQL语句,并包括一个条件表达式这样的:如果discounted_price为0,它会选择其他的价格,discounted_price被选中。 在SQL语句中可以使用条件表达式吗? 谢谢! :)

回答

5

试试这个:

SELECT 
    C.cart_id, 
    I.item_id, 
    C.quantity, 
    COALESCE(I.discounted_price, I.price) AS price 
FROM 
    cart C, 
    item I 
WHERE 
    I.item_id = C.item_id 

COALESCE选择从参数列表中的第一个非空值。即,当discount_price为NULL时,它返回价格。

如果你的“空”值是0.00,你可以使用这个:

SELECT 
    C.cart_id, 
    I.item_id, 
    C.quantity, 
    IF(I.discounted_price > 0, I.discounted_price, I.price) AS price 
    ... 

也就是说,如果折扣价大于零,使用,否则使用正常的价格。

+0

事实上,如果一个项目没有折扣价,该值是在我的表0.00。 0计为空吗? – chupinette 2010-03-05 12:15:20

+0

不,0不计为空。 – sgmoore 2010-03-05 12:46:22

+0

非常感谢Tatu Ulmanen! :) – chupinette 2010-03-05 18:28:40

0

在SQL Server中,这将是:

SELECT C.cart_id,I.item_id,C.quantity, CASE WHEN I.discounted_price IS NULL THEN I.price ELSE I.discounted_price END AS price 
FROM cart C, item I 
WHERE I.item_id = C.item_id 

你可以给在MySQL的一个尝试。

+0

谢谢!我会尝试它 – chupinette 2010-03-05 12:16:06

0

喜欢的东西

SELECT C.cart_id,I.item_id,C.quantity, 
    IfNull(I.discounted_price,I.price) as Price 
FROM cart C, item I 
WHERE I.item_id = C.item_id 

使用ISNULL如果您使用MSSQL