복붙노트

[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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    5.또 다른 방법:

    또 다른 방법:

    SELECT A INTO @v FROM proxies ORDER BY A LIMIT 1;
    SELECT * FROM proxies WHERE A=@v
    
  6. from https://stackoverflow.com/questions/27366107/second-select-query-if-first-select-returns-0-rows by cc-by-sa and MIT license