【问题标题】:Query With Conditional If Statement使用条件 if 语句查询
【发布时间】:2013-03-23 09:35:55
【问题描述】:

我正在尝试编写一个查询,如果找不到第一个行,它将选择另一行,即如果找不到指定的行,则获取“默认”。

类似的东西:

SELECT
*
FROM
teams
WHERE
team=:team_id
ELSE
WHERE team=1

在Mysql中可以做到吗?

顺便说一句,默认值可能不仅仅是 1。

【问题讨论】:

    标签: mysql sql pdo


    【解决方案1】:

    假设:team_id 大于1 你可以这样做

    select * from teams where team=1 or team=:team_id order by team desc limit 1
    

    或者如果你不知道两个 id 的顺序:

    select * from teams where team=1 or team=:team_id order by team=:team_id desc limit 1
    

    【讨论】:

    • +1 聪明。为了(更)完整/灵活的答案(因此我从这个简短/甜蜜的答案中学到更多),如果不知道指定值是否更大/更少,您是否介意建议您如何处理这个问题比默认值?
    • @Sepster 有效问题即使在这种情况下(如果默认不是 team=1)
    • @Sepster 查看编辑。但它可能不适用于 OP,因为默认 id 为 1。
    • 谢谢。我从未见过“按列=值排序”语法。现在要看看mysql docco,看看我还错过了什么(我有MSSQL背景,这里不可用)。很高兴我问了这个问题:-)
    • 我应该说默认值可能不仅仅是 1。我会尝试您的解决方案并回复您:)
    【解决方案2】:
    SELECT * FROM teams WHERE team=:team_id
    UNION ALL
    SELECT * FROM teams WHERE team=1
    ORDER BY team=1
    LIMIT 1
    

    【讨论】:

      【解决方案3】:

      再次查看我的问题后,我认为它可能比我最初想的更容易。

      以下方法不起作用吗?:

      SELECT
      *
      FROM
      teams
      WHERE
      team=:team OR (team!=:team AND team=:default_team)
      

      【讨论】:

      • 这不会执行您在问题中指定的操作。
      猜你喜欢
      • 1970-01-01
      • 2015-06-24
      • 2012-02-03
      • 1970-01-01
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多