【问题标题】:Check if no results with mysql用mysql检查是否没有结果
【发布时间】:2013-07-29 07:46:50
【问题描述】:

我想知道mysql中是否有办法检查查询是否产生一些结果,如果没有则执行查询。
示例:

(SELECT * FROM table WHERE id=2) IF NO RESULT (SELECT * FROM table WHERE id=4)

编辑

我只需要一个查询,基本上首先我检查是否有带有参数的结果(例如状态 = 0)如果没有结果我想执行相同的查询,参数更改为状态 = 2。
希望对你有帮助

更多编辑
基本上我有一个包含操作员和部门的表,另一个包含所有用户的表,首先我检查第一个表中是否有可用的操作员并且它不是在度假,如果没有结果我将从第二个表中选择和管理,但前提是没有可用的运算符

更多更多编辑
此查询检查是否有可用的操作员,但它没有选择管理员

query = "SELECT b.id  
        FROM ".$SupportUserTable." b
        INNER JOIN ".$SupportUserPerDepaTable." a
            ON b.id=a.user_id
        WHERE a.department_id=? AND b.holiday='0' AND a.user_id!=".$_SESSION['id']." 
        ORDER BY b.assigned_tickets,b.solved_tickets ASC LIMIT 1";

最新解决方案
这不是我想要的,但它有效,我愿意改进以避免执行两个查询:

$query = "SELECT *
                FROM(
                        (SELECT b.id  
                            FROM ".$SupportUserTable." b
                            INNER JOIN ".$SupportUserPerDepaTable." a
                                ON b.id=a.user_id
                            WHERE a.department_id=? AND b.holiday='0' AND a.user_id!=".$_SESSION['id']." 
                            ORDER BY b.assigned_tickets,b.solved_tickets ASC LIMIT 1)
                    UNION
                        (SELECT id  
                        FROM ".$SupportUserTable."
                        WHERE  status='2' AND id!=".$_SESSION['id']." 
                        ORDER BY assigned_tickets,solved_tickets ASC LIMIT 1)
                    ) tab
                    LIMIT 1
            ";

【问题讨论】:

  • 有时这类问题指向糟糕的设计。
  • @Strawberry Tables 设计?因为这是我能想到的最好的,用户可以分配到多个部门,所以我决定创建一个不同的表(每个部门的用户和用户),首先跟踪用户状态(操作员、用户或管理员)和假期和用户关联部门的第二个,我认为将管理员添加到第二个表并不有利,因为如果我添加一个新部门,我还必须将每个管理员添加到它。如果您有任何建议,我很乐意倾听
  • 所以给定用户可能(同时)是一个部门的operator 和另一个部门的administrator
  • 对不起,用户可以是操作员(多个部门)或管理员(仅限全局)

标签: mysql


【解决方案1】:
SELECT * FROM table WHERE id = (
  SELECT id FROM table WHERE id IN (2,4) ORDER BY id LIMIT 1
)

【讨论】:

  • @Dheed:我建议不要在此查询中使用 IF。尝试使用我上面展示的技术进行调整。
【解决方案2】:

你可以这样做

Select IF(
(SELECT count(*) FROM table WHERE id=2), (SELECT * FROM table WHERE id=2),(SELECT * FROM table WHERE id=4))

【讨论】:

  • IF() 不能返回多列。
【解决方案3】:
select t.*
from
(SELECT * FROM table 
WHERE id in (2,4)
LIMIT 1)t
order by t.id

【讨论】:

  • 我认为他不想同时获得这两个结果
  • 现在出现语法错误(外部查询中没有FROM 子句);并且子查询使用LIMIT 而不使用ORDER BY,这仍然会产生不确定的结果。
猜你喜欢
  • 2017-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-18
  • 1970-01-01
  • 2016-07-23
  • 2023-04-01
  • 2014-03-01
相关资源
最近更新 更多