2012-05-17 74 views
3

使用MySQL和php如何在单个查询中获取匹配某个查询的所有结果,但是如果找不到结果,则会查找所有默认结果?例如,我有这个疑问:Mysql - 如果找不到特定记录,抓取默认记录

SELECT * FROM table1 WHERE typeid = 5 

如果没有结果从查询中找到下面那么我想找到从表1与1 typeid的所有结果:

SELECT * FROM table1 WHERE typeid = 1 

我怎么能这样做在一个单一的查询?如果我尝试下面的查询,我得到两个5和1:

SELECT * FROM table1 WHERE typeid = 5 OR typeid = 1 

所有我想要的就是查询表1与5 typeid的分配中的所有记录,如果没有找到结果,然后得到的所有结果分配到的typeid = 1在一个查询中。我怎样才能做到这一点?或者我必须有2个查询?

编辑

我需要这个了多个记录返回,而不是一个单独的记录。

回答

2
SELECT * 
FROM table1 
WHERE typeid = IF((SELECT COUNT(*) FROM table1 WHERE typeid = 5), 1, 5); 
+0

+1与我的答案非常相似,但更短。 – Travesty3

5

这个怎么样?

SELECT * FROM table1 
WHERE CASE WHEN (SELECT COUNT(1) FROM table1 WHERE typeid = 5) > 0 THEN 
    typeid = 5 
ELSE 
    typeid = 1 
END; 
+0

打我吧! +1 – eggyal

+1

@eggyal:就在这个时候......这个让我挠了脑袋一分钟。不确定你是否可以在'WHERE'子句中使用条件。我只用过'SELECT'部分。 – Travesty3

+0

+1不错。这适用于多行。从技术上讲,我认为你可以放弃> 0部分。 –

0
SELECT * 
    FROM table1 
    WHERE typeid = 5 
    UNION ALL 
    SELECT * 
    FROM table1 
    WHERE typeid = 1 
     AND NOT EXISTS 
      (SELECT * 
      FROM table1 
      WHERE typeid = 5 
     ) ; 
相关问题