【问题标题】:MYSQL query code to check if statement and get row valuesMYSQL查询代码检查if语句并获取行值
【发布时间】:2021-12-14 18:18:32
【问题描述】:

所以我试图在 MySQL 上使用 if 语句。我有一个包含 tp1 列的表,在此列中我有两个不同的字符串值 L1_ON 或 L1_OFF,如果 tp1 列上有一个,我想获取 L1_ON,但如果没有 L1_ON,则获取 L1_OFF。这是写的,我知道只是为了额外的解释是不正确的。

$query1 = sprintf('SELECT id,dateandtime,tp1 FROM plate WHERE AND  IF(tp1 LIKE "L1_ON") else (tp1 LIKE "L1_OFF") ORDER BY id ASC LIMIT 1');

【问题讨论】:

  • 你是说你希望它要么匹配字符串“L1_ON”并返回它,或者如果它不匹配(不管值)然后“L1_OFF”?
  • 是的,我想获得 L1_ON,但如果我无法获得它,就给我带来 L1_OFF,所以基本上不想获得空值
  • 样本数据和期望的结果会有所帮助。另外,对于给定的 id,l1_on 可以有多行吗?
  • 是的,我处理多行,但我只想检查整个表的 L1_ON,导致我的表每晚重新启动到 L1_OFF 所以,第二天我不想得到空值希望系统给我L1_OFF

标签: php html mysql sql


【解决方案1】:

使用 if 语句我找到了我的问题的最佳答案,如下所示:

$query  = sprintf('SELECT IF (tp1 REGEXP "L1_ON" ,dateandtime ,"L1_OFF") id,dateandtime,tp1 FROM plate  ORDER BY id ASC LIMIT 1 ');

所以代码检查 tp1 是否有 L1_ON,然后给我时间来处理那个 raw,如果不只是给任何 L1_OFF raw with time(dateandtime= time of L1_.. raw)。

【讨论】:

    【解决方案2】:

    如果“L1_ON”和“L1_OFF”是唯一可能的值,那么您只需按tp1 列进行排序,以确保“L1_ON”列首先出现:

    SELECT 
      id,dateandtime,tp1
    FROM plate
    ORDER BY tp1 DESC, id ASC
    LIMIT 1
    

    如果可能有超过这两个值,并且您在脚本中使用它,老实说,我可能只运行两个查询。一个尝试获取“L1_ON”值,然后第二个获取所有其他值。

    SELECT 
      id,dateandtime,tp1
    FROM plate
    WHERE tp1 = "L1_ON"
    ORDER BY id ASC
    LIMIT 1
    

    最后,如果您真的想在一个查询中执行此操作,您可以合并两个查询,一个用于所有“L1_ON”值,一个用于任何不是“L1_ON”的值

    SELECT * 
      FROM (
      SELECT 
        id,
        dateandtime,
        tp1
      FROM plate
      WHERE tp1 = "L1_ON"
      ORDER BY id ASC
    ) AS tp1_on
    
    UNION ALL
    
    SELECT *
    FROM (
      SELECT 
        id,
        dateandtime,
        tp1
      FROM plate
      WHERE tp1 != "L1_ON"
      ORDER BY id ASC
    ) AS tp1_off
    
    LIMIT 1
    

    【讨论】:

    • 差不多了,但如果有 L1_ON,我想优先考虑 L1_ON,不需要 L1_OFF
    • 你刚刚做了什么,即使我有 L1_ON 仍然给我 L1_OFF
    • 哦,我想我现在明白了。
    • 好的,我已经更新了答案。
    • 先生,您刚才做的和第一个回答差不多,给我L1_OFF就行了,但是我已经告诉您L1_ON的优先级了。以最好的方式表达......> 如果 L1_ON 存在,则向我显示它并忽略 L1_OFF> 如果 L1_ON 不激发向我显示 L1_OFF。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 2014-02-05
    • 2015-04-22
    相关资源
    最近更新 更多