2010-03-13 7 views
1

내 페이지에서 대부분의 시간을 루프를 사용하여 테이블의 한 필드 값만 인쇄해야합니다. 예를 들어 : 예를 들어PHP를 통해 쿼리하여 mysql 테이블의 값을 인쇄하는 가장 좋은 방법

<?php 

for($i=1;$i<=mysql_num_rows($result);$i++) 
{ 
    echo $row['name']; 
    $sql1="select industry from table_industry where profid='".$row['prof']."'"; 
    $result1=mysql_query($sql1); 
    $row1=mysql_fetch_array($result1); 
    echo $row1['industry']; ?> 
} 
?> 

, 나는 테이블에 5000 레코드를 가지고 위의 루프는 5000 번 실행됩니다.

테이블 table_industry에서 industry 필드의 값을 인쇄하는 가장 좋은 방법은 무엇입니까?

위 코드를 작성 했습니까? 더 빠른 실행을위한 방법이 있습니까?

+1

업계 데이터를 동시에 가져 오기 위해 원본 SQL에서 조인을 사용하지 않는 이유가 있습니까? – Lee

+1

$ 결과를 "생성하는" "외부"쿼리를 보여주십시오. – VolkerK

+0

참고 : mysql_num_rows를 임시 변수로 가져오고 모든 반복에서 함수를 호출하지 마십시오. 라이브러리의 일부 버전에서는 모든 호출에 대해 추가 MySQL 쿼리가 발생합니다 – Piskvor

답변

1

SQL은

 SELECT 
    table_prof.profid 
    , table_prof.name 
    , table_industry.industry 
     FROM table_prof 
     LEFT JOIN table_industry USING (profid) 
     ORDER BY table_prof.name ASC; 

난이 당신을 도울 것이라고 생각됩니다 ...

4
  1. 5000 개 레코드 모두를 반복하지 마십시오. 필터링 또는 페이지 매김 사용
  2. 중첩 된 쿼리를 피하십시오. JOIN의 힘을 사용하십시오.
0

로직을 따르려면 해시에서로드하고 해시에서 반복하여 데이터베이스를 죽이지 않는 모든 정보를 선택합니다.

4

가장 좋은 추측은 JOIN가 도움이 될 것입니다. 일반적으로

SELECT 
    table_prof.profid 
, table_prof.name 
, table_industry.industry 
FROM table_prof 
JOIN table_industry USING (profid) 
ORDER BY table_prof.name ASC; 

, 루프에서 데이터베이스를 조회하는 것은 매우 나쁜 생각하고해야한다 :

join하면, 예를 들어, 다른 테이블을 결합하여 하나의 쿼리에 액세스하기 위해 그는 MySQL 서버에 지시 할 수 있습니다 왜 그 일을하는지 정확히 알지 못하면 피하십시오. 루프를 통해 질의를하면 데이터베이스 서버를 손쉽게 가져올 수 있습니다. 당신은 당신이 다음 table_prof 테이블 에서 모든 값을 포함 할 경우 표는 다음 SQL은

SELECT 
    table_prof.profid 
    , table_prof.name 
    , table_industry.industry 
     FROM table_prof 
     JOIN table_industry USING (profid) 
     ORDER BY table_prof.name ASC; 

하고있을 것입니다 산업의 값으로 만 행을 포함 할 경우 사용

가입

관련 문제