[SQL] 두 번째 SELECT 쿼리의 경우 첫 번째 SELECT 반환 0 행
SQL두 번째 SELECT 쿼리의 경우 첫 번째 SELECT 반환 0 행
나는 PHP 스크립트 속도를 높이기 위해 노력하고 내가 현재 물건의 MySQL의 영역에서 일부 PHP 논리를 밀어하고있다. 첫 번째 선택은 더 행을 반환하지 않는 경우 다른 선택 쿼리, 또는 0의 수를 만들 수있는 방법이 있습니까?
첫 번째 쿼리의 요구를 먼저 실행하는 것을 명심하고, 첫 번째는 빈 집합을 반환하는 경우 두 번째에만 활성화해야합니다.
SELECT * FROM proxies WHERE (A='B') || SELECT * FROM proxies WHERE (A='C')
위의 두 쿼리의 경우이 코드를 가지고 있지만, (귀국일 한 번 한 번 계산하고) 두 번 각 쿼리를 실행하는 것 같다. 이 작업을 수행하는 더 좋은 방법이 있나요?
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
해결법
-
==============================
1.EXISTS와 함께 하나의 옵션은 UNION ALL을 사용하는 것입니다 :
EXISTS와 함께 하나의 옵션은 UNION ALL을 사용하는 것입니다 :
SELECT * FROM proxies WHERE A='B' UNION ALL SELECT * FROM proxies WHERE A='C' AND NOT EXISTS ( SELECT 1 FROM proxies WHERE A='B' )
그들이 존재하는 경우는 프록시 테이블 A = 'B'에서 행을 반환합니다. 그들은 존재하지 않는 경우, 그것은 A = 'C'에 해당 행을 찾습니다.
-
==============================
2.
SELECT * FROM proxies WHERE A=(CASE WHEN (SELECT COUNT(*) FROM proxies WHERE A='B') > 0 THEN'B' ELSE 'C' END)
최신 정보
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)
-
==============================
3.당신은 여러 값이 일반적인 경우와 존재하는 가장 낮은 값에 속하는 행만을 검색 할 ( 'B', 'C', 'D'등 'E'는, 말을 할 수 있습니다) , 당신은 다음 쿼리를 사용합니다. 이것은 당신이 노출 된 특정 경우에도 작동합니다.
당신은 여러 값이 일반적인 경우와 존재하는 가장 낮은 값에 속하는 행만을 검색 할 ( 'B', 'C', 'D'등 'E'는, 말을 할 수 있습니다) , 당신은 다음 쿼리를 사용합니다. 이것은 당신이 노출 된 특정 경우에도 작동합니다.
SELECT p1.* FROM proxies p1 LEFT JOIN proxies p2 ON p1.A > p2.A WHERE p2.A IS NULL
깡깡이
-
==============================
4.난 당신이 뭘 하려는지이 더 많거나 적은 커버 생각합니다. 당신이 행의 수를 필요한 경우 반환 단지 mysqli-> NUM_ROWS의 값을 얻을
난 당신이 뭘 하려는지이 더 많거나 적은 커버 생각합니다. 당신이 행의 수를 필요한 경우 반환 단지 mysqli-> NUM_ROWS의 값을 얻을
$db = new mySQLi(etc); //run your first query $query = "SELECT * FROM proxies WHERE A='B'"; $result = $db->query($query); //check for rows returned if($result->num_rows > 0){ //if there are rows get them while($row = $result->fetch_assoc()){ //deal with the results } } else { //otherwise run your other query and get those results $query = "SELECT * FROM proxies WHERE A='C'"; $result = $db->query($query); while($row = $result->fetch_assoc()){ //deal with the results } }
-
==============================
5.또 다른 방법:
또 다른 방법:
SELECT A INTO @v FROM proxies ORDER BY A LIMIT 1; SELECT * FROM proxies WHERE A=@v
from https://stackoverflow.com/questions/27366107/second-select-query-if-first-select-returns-0-rows by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 다가오는 생일을 선택 MYSQL (0) | 2020.06.11 |
---|---|
[SQL] SQL : 집계 문자열 함께 (0) | 2020.06.11 |
[SQL] SQL에 LINQ : 어떻게 이름이 변경되는 자동 생성 된 개체 이름을 중지합니까? (0) | 2020.06.11 |
[SQL] 포스트 그레스에 절을 반환 인 UPDATE에서 선택할 수 없습니다 (0) | 2020.06.11 |
[SQL] 는 SQL Server 통합 서비스를 사용하여 Oracle 데이터베이스에 연결 (0) | 2020.06.11 |