2011-01-25 4 views
-1
// make empty array 
    $sqlArray=array(); 
    $jsonArray=array(); 


    // START NEED FAST WORKING ALTERNATİVES ----------------------------------------------------- 
    // first 20 vistors 
    $query = "SELECT user_id FROM vistors LIMIT 20"; 
    $result = mysql_query ($query) or die ($query); 

    // make vistors user query array 
    while ($vstr_line = mysql_fetch_array($result)){ 
    array_push($sqlArray, $vstr_line['user_id']); 
    } 

    // implode vistors user array 
    $sqlArray_impl = implode("', '", $sqlArray); 
// END NEED FAST WORKING ALTERNATİVES ----------------------------------------------------- 


    // Get vistors information 
    $query = "SELECT id, username, picture FROM users WHERE id IN ('$sqlArray_impl')"; 
    $qry_result = mysql_query($query) or die($query); 


    while ($usr_line = mysql_fetch_array($qry_result)){ 
    array_push($jsonArray, $usr_line['id'].' - '.$usr_line['username'].' - '.$usr_line['picture']); 
    } 


    print_r($sqlArray); 

    echo '<br><br>'; 

    print_r($jsonArray); 

이 제 기능을 볼 수 .. 내가 빠른 작업 대안에 대한 교체해야 .. 범위 내에서mysql_query에 대한 배열을 반환하는 방법?

기능을 빠르게 대체보다는 실행, 나에게, 위 지정했습니다. 쿼리가 배열을 반환합니다?

모든 헬퍼를위한 thx!

+1

그런 종류의 동작은 완벽하게 훌륭합니다 (IMO, 나는 무식하지 않기를 바란다.) 쿼리 시간이 나쁘지 않으면 느려서는 안됩니다. 프로파일 링 했습니까? 필요한 이유를 보여주는 번호를 알려 주실 수 있습니까? – Tesserex

+0

왜 쿼리를 중첩하지 않습니까? id, username ...을 선택하십시오. 여기서 id는 (사용자가 제한 20에서 user_id를 선택하십시오.) – cromestant

+0

"빠른 대안"을 요청할 특별한 이유가 있습니까? 코드에 문제가 있습니까? 쿼리는 아니지만 현재 코드가 있습니까? –

답변

2
  1. 쿼리 수를 2에서 1로 줄이려면 JOIN 또는 SUB SELECT를 사용할 수 있습니까? 부스트는 많이 줄지는 못하지만 샷을하고 클리너를 구현할 가치가 있습니다.

  2. 어디에서 병목 현상이 발생합니까? 대부분 PHP와 db가 아닌 것입니다.

  3. 테이블/열의 색인이 제대로 설정되어 있습니까? 두 쿼리 모두에서 EXPLAIN을 실행합니다.

0

PDO를 사용하면 (어쨌든 권장 됨 ...) fetchAll()을 사용하여 결과 배열을 한꺼번에 반환 할 수 있습니다.

두 번째 쿼리의 경우 string concatenation in MySQL을 사용하여 원하는 결과를 직접 반환 할 수 있습니다.

1

가장 쉬운 하위 쿼리가 하나 DB 차례와 코드를 많이 제거로 첫 번째 쿼리 포함하는 것입니다 :

// Get vistors information 
    $query = "SELECT id, username, picture FROM users WHERE id IN (SELECT user_id FROM vistors LIMIT 20)"; 
    $qry_result = mysql_query($query) or die($query); 

첫 번째 별도가 더 많은 이유가없는 한, 그러나 그것은이다 코드 예제에서는 보이지 않습니다.

+0

SELECT id, username, picture 사용자로부터의 ID (SELECT user_id FROM vistors LIMIT 20) -> SQL 구문에 오류가 있습니다. 1 행에서 'LIMIT 20'근처에서 사용할 올바른 구문을 보려면 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오. – NovaYear

관련 문제