2012-05-09 2 views
0

내 스크립트는 요구 사항을 충족 시키지만이 이유 때문에 수천 개의 쿼리가 실행되므로 50-65 초가 걸립니다. 나는 대안을 찾고 있는데,보다 우아하고 빠른 해결책이다.php MySQL이 문자열간에 차이가 있음

SELECT GROUP_CONCAT(DISTINCT BatchNo SEPARATOR ', ') AS picklists, web_company_name 
FROM PickBatch 
LEFT JOIN customer_master ON customer_master.VC_CUSTOMER_CODE = PickBatch.Customer 
GROUP BY Customer 

이것은 내가 3443 4334을 비교 다른 열 그래서 예를 들면

while($row=mysql_fetch_array($res)) 
{ 
    $picklists = explode(', ', $row['picklists']); 
    $pickString = ''; 
    foreach($picklists as $batch) 
    { 
     //invoiced 
     $sql2 = "SELECT invoice_no FROM invoice_web_order WHERE FIND_IN_SET('$batch', frombatch) LIMIT 1"; 
     $res2 = mysql_query($sql2) or die(mysql_error()); 
     if (mysql_num_rows($res2) > 0) 
     { 
      continue; 
     } 
     $pickString .= "$batch, "; 
    } 
    echo $pickString; 
} 

하나에 의해 그것을 하나를 비교해야, 4334, 3443, 3341처럼 그 후 4543

을 열 선택 목록을 반환 , 3341, 4543 (예 : 3892, 4890, 3341, 2389, frombatch)은 3343을 제외합니다.

같은 방법으로 다른 방법이 있습니까? 그래서 4334, 3443, 4543 만 반환됩니까?

+2

"3343을 제외 할 것입니다." 3341을 제외 할 것입니까? –

답변

0

보인다.

Table: PickBatch 
BatchNo 
4334 
3443 
3341 
5453 

Table: invoice_web_order 
frombatch 
3982, 4890, 3341, 2389 
####, ####, #### 
####, ####, ####, #### 

SELECT DISTINCT batchno FROM PickBatch LEFT JOIN invoice_web_order ON FIND_IN_SET(batchno, frombatch) WHERE invoice_web_order.frombatch IS NULL 

고객이 그룹화 한 이유는 확실하지 않습니다. 설명을 해두면 적절한 경우이 솔루션에 대한 작업을 도와 드릴 수 있습니다.

0

테이블 정의를 제공해 주시겠습니까? 당신은 단지 배치 번호가 이미 invoice_web_order 테이블의 모든 행의 frombatch 열 어딘가에 존재하지 않는 PickBatch에 존재하는 알고 싶어처럼

SELECT 
    DISTINCT BatchNo as BN, 
    GROUP_CONCAT(DISTINCT BatchNo SEPARATOR ', ') AS picklists, 
    web_company_name 
FROM PickBatch 
LEFT JOIN customer_master ON customer_master.VC_CUSTOMER_CODE = PickBatch.Customer 
WHERE PickBatch.BN <>  (SELECT frombatch 
          FROM invoice_web_order 
          WHERE FIND_IN_SET(PickBatch.BN, frombatch) 
          LIMIT 1) 
GROUP BY Customer 
관련 문제