【问题标题】:Trying to make some type of IF mySQL Statement试图制作某种类型的 IF mySQL 语句
【发布时间】:2012-11-27 04:23:15
【问题描述】:

我正在尝试创建一个 SQL 语句,其中包含一种 IF 语句。这是我目前的声明:

$sql = "SELECT b.FrameNumber, b.BikeCode, p.FrameNumber 
        FROM BikeStock b LEFT JOIN Purchase p 
               on b.FrameNumber = p.FrameNumber 
        WHERE b.bikecode = '$bikecode'";

我想将上面的陈述与下面的文字结合起来,但不知道如何。

如果 BikeStock 表中的 PurchaseID 的值大于 0,它将选择不同的帧号。

非常感谢您的帮助,并提前致谢。

【问题讨论】:

    标签: php mysql sql database


    【解决方案1】:

    你应该

    SELECT b.BikeCode, IF(b.PurchaseID > 0, 
            p.FrameNumber, b.FrameNumber) AS FrameNumber 
        FROM BikeStock b 
        LEFT JOIN Purchase p on b.FrameNumber = p.FrameNumber 
        WHERE b.bikecode = '$bikecode'
    

    附:不要忘记转义 $bikecode 以进行 SQL 注入。

    【讨论】:

    • 不幸的是它没有用,但谢谢。也许,我不确定为什么,你的 IF 语句是否说如果帧号大于 0,它将被处理?
    • 您可以尝试使用 IFNULL 代替 IF 并切换参数位置
    • 我很困惑,所以 IFNULL(b.purchaseID, p.FrameNumber, b.FrameNumber) As FrameNumber
    【解决方案2】:
    SELECT b.FrameNumber, b.BikeCode, 
        CASE WHEN b.purchasreID > 0 THEN p.other_framenumber ELSE p.FrameNumber END AS FrameNumber
    FROM BikeStock b LEFT JOIN Purchase p 
    ON b.FrameNumber = p.FrameNumber
    WHERE b.bikecode = '$bikecode'
    

    除此之外,请考虑使用Bobby Tables 来防止 SQL 注入。

    【讨论】:

    • 谢谢你的其他。我真的不明白你是怎么做到的。因为我没有一个名为 other_framenumber 的字段。也许我在上面错误地解释了我想要的东西。我希望在选择帧号时使用它,我希望它确保该帧号没有购买 ID,如果有,我希望它选择另一个帧号。
    • “另一个帧号”是什么?
    • 在我的 BikeStock 表中,我有 4 个具有自行车代码 123 的车架号。如果有人已经购买了一个车架号,我想要它,它将选择另一个车架号。很抱歉造成混乱。
    • 我对您的数据库结构不太了解,也不太了解,无法进一步帮助您。将p.other_framenumber 更改为您想要的值。
    猜你喜欢
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 2012-04-12
    • 2016-01-11
    • 1970-01-01
    • 2020-09-22
    • 2012-06-02
    • 2010-09-16
    相关资源
    最近更新 更多