我正在尝试加速PHP脚本,我目前在Mysql域中推送一些PHP逻辑.如果第一个Select没有返回任何行,或者计数为零,是否有办法生成不同的选择查询?
请记住,第一个查询需要先运行,第二个查询只有在第一个查询返回空集时才会被激活.
SELECT * FROM proxies WHERE (A='B') || SELECT * FROM proxies WHERE (A='C')
Run Code Online (Sandbox Code Playgroud)
对于上面的2个查询,我有这个代码,但它似乎运行每个查询两次(一次计数,一次返回).有一个更好的方法吗?
IF (SELECT count(*) FROM proxies WHERE A='B')>0
THEN SELECT * FROM proxies WHERE A='B'
ELSEIF (SELECT count(*) FROM proxies WHERE A='C')>0
THEN SELECT * FROM proxies WHERE A='C'
END IF
Run Code Online (Sandbox Code Playgroud)
sge*_*des 15
一种选择是使用UNION ALL
有EXISTS
:
SELECT *
FROM proxies
WHERE A='B'
UNION ALL
SELECT *
FROM proxies
WHERE A='C' AND NOT EXISTS (
SELECT 1
FROM proxies
WHERE A='B'
)
Run Code Online (Sandbox Code Playgroud)
这将返回proxies
表中的行(A='B'
如果存在).但是,如果它们不存在,它将查找那些行A='C'
.
SELECT *
FROM proxies
WHERE A=(CASE WHEN
(SELECT COUNT(*) FROM proxies WHERE A='B') > 0 THEN'B'
ELSE 'C' END)
Run Code Online (Sandbox Code Playgroud)
UPDATE
SELECT *
FROM proxies
WHERE (
CASE WHEN (SELECT COUNT(*) FROM proxies WHERE A='B' LIMIT 1) > 0 THEN
(A='B')
WHEN (SELECT COUNT(*) FROM proxies WHERE A='C' LIMIT 1) > 0 THEN
(A='C')
WHEN (SELECT COUNT(*) FROM proxies WHERE A='D' LIMIT 1) > 0 THEN
(A='D')
ELSE 1=2 END)
Run Code Online (Sandbox Code Playgroud)