2009-10-04 5 views
1

안녕하세요, 저는 전자 상점을 만들고 범주 트리와 여러 제품의 다양한 제품을 한 페이지에 15036 개 이상의 mysql_query("SELECT ..."); 개의 검색어와 같이 표시했습니다. (내가 "while"루프를 계산한다면).PHP - 너무 많은 mysql_query ("SELECT ..") ..?

너무 많습니까? 그렇다면 부작용이 있습니까? (ofc. 데이터로드에 더 많은 시간이 걸립니다.)

그런 식으로하지 않고도이 코드의 효과를 얻을 수 있습니까?

$result2 = mysql_query("SELECT * FROM ceny WHERE produkt_id='$id' ORDER BY gramaz"); 
$result3 = mysql_query("SELECT * FROM ceny WHERE produkt_id='$id' ORDER BY gramaz"); 
$result4 = mysql_query("SELECT * FROM ceny WHERE produkt_id='$id' ORDER BY gramaz"); 
$result5 = mysql_query("SELECT * FROM ceny WHERE produkt_id='$id' ORDER BY gramaz"); 

while($row2 = mysql_fetch_array($result2)) { } 
while($row3 = mysql_fetch_array($result2)) { } 
while($row4 = mysql_fetch_array($result2)) { } 
while($row5 = mysql_fetch_array($result2)) { } 

감사합니다.

답변

13

일반적으로 실행하는 쿼리 수를 줄이는 것이 좋습니다. 이 경우, 예를 들어, 단일 쿼리의 모든 제품에 대한 행을 선택할 수 있습니다

SELECT * FROM ceny WHERE produkt_id IN (?, ?, ?, ...) ORDER BY gramaz 

은 그럼 당신은 하나의 루프를해야합니다 결과를 통해 반복하고 해당 변수 (들)을 채우는 :

$ceny = array() 
while ($row = mysql_fetch_array($result)) { 
    $id = $row['produkt_id']; 
    $ceny[$id][] = $row; 
} 

이제 $ceny[$produkt_id]에는 해당 제품의 ceny에 해당하는 행 목록이 포함되어 있으며, 배열은 gramaz입니다.

+0

+1 또한 'produkt_id'로 주문한 다음 'gramaz'로 주문하면 여러 차례와 동일한 순서로 결과를 얻을 수 있습니다. –

0

정말 당신이 그 페이지에 대한 부하를 줄이고 자한다면, 상황에 따라 조인이 필요하고 어쩌면 일부 AJAX가 필요해 보입니다.

정확하게 이해한다면 카테고리의 트리 메뉴를 표시하고 특정 브랜치를 클릭하여 클릭하면 해당 카테고리에 속하는 항목이 올바르게 표시됩니까?

그래서 현재 접근법은 카테고리를 순환하여 item 테이블에서 select *를 사용하여 보여줍니다.

이 경우 올바르게 이해하고 있지만 간단한 가입을 사용하여 해결할 수 있습니다. items 테이블에 대해 하나의 select 문을 수행하고 항목 테이블에있는 외래 키에 의해 categories 테이블에 조인 한 다음 카테고리별로 정렬하려고합니다.

이제 단일 결과 집합을 반복하여 카테고리와 관련 항목을 모두 표시 할 수 있습니다.