2012-06-27 2 views
1

기존 항목을 점검했습니다. 내 문제에 대한 해결책이 있지만 올바른 해결 방법이 아니라는 것을 알고 있으며 해결 방법을 만드는 것보다이 작업을 올바르게 만드는 데 관심이 있습니다.내부 조인과 mysql_num_rows() 사용은 항상 1 줄을 더 줄입니다.

나는 테이블, 진단, 방문 및 치료가 3 개인 프로젝트가 있습니다. 사람들은 방문을 위해 방문하고 치료를받으며 치료는 진단을위한 것입니다.

이 정보를 페이지에 표시하려면 환자의 진단을 보여주고 방문한 시간을 표시하고 방문 정보를 클릭하여 치료 정보를 표시하려고합니다.

을 수행하려면 이것을 만든 PHP에서이 기능 :

<? 
function returnTandV($dxid){ 
    include("db.info.php"); 
    $query = sprintf("SELECT treatments.*,visits.* FROM treatments LEFT JOIN visits ON 
    treatments.tid = visits.tid WHERE treatments.dxid = '%s' ORDER BY visits.dos DESC", 
    mysql_real_escape_string($dxid)); 

    $result = mysql_query($query) or die("Failed because: ".mysql_error()); 
    $num = mysql_num_rows($result); 
    for($i = 0; $i <= $num; ++$i) { 
     $v[$i] = mysql_fetch_array($result MYSQL_ASSOC); 
     ++$i; 
    } 

    return $v; 
} 
?> 

기능이 작동하고 나는 모두 치료와 1 개 ASSOC으로 방문에서 모든 행을 인 원하는 표시됩니다. 배열 문제는 항상 데이터베이스에 실제로보다 1 행을 반환하고 나는 이유를 모르겠습니다. 총 3 행이 있지만 msql_num_rows()는 2로만 표시합니다. 제 해결 방법은 1을 추가하는 것이 었습니다. ($num = mysql_num_rows($result)+1;)하지만 올바른 것이 좋습니다.

+0

코드를 형식화하면 사람들이 쉽게 질문에 답변 할 수 있으므로 쉽게 읽을 수 있습니다. –

+0

PHP를 배우고 있다면, mysqli 나 PDO를 사용해야한다. (http://www.php.net/manual/en/mysqlinfo.api.choosing.php) mysql 함수. –

+0

모두에게 감사드립니다. 나는 for 루프에서 ++ $ i를 보았고 거기에서도 그것을 보지 못했고, 전체 시간 내게 완전히 보이지 않았습니다. 그것을 잡아 주셔서 감사합니다. 이제 작동합니다. 새로운 기능은 내가 그들에 대해 알지 못했던 뉴스입니다. 링크 덕분입니다. – Binxalot

답변

2

이 섹션은 나에게 의심스러운 : 당신이 가장 가능성이 $i < $num

이 조합 할 수있다을 할 때

for($i = 0; $i <= $num; ++$i) { 
    $v[$i] = mysql_fetch_array($result MYSQL_ASSOC); 
    ++$i; 
} 
  1. 당신은 두 번 당신은 $i <= $num에가는거야
  2. i를 증가하고 예상치 못한 결과가 나오는 이유 기본적으로 3 개의 행이 있지만 행 0과 2 (행 1 건너 뛰기) 만 요구합니다.

0

프로그래머는 항상 0부터 계산합니다. 따라서 루프를 0에서 시작합니다. 2로 끝나면 3 행에 도달했습니다.

Row0, Row1, Row2.

0

$ i = 0 인 경우, 배열을 추가 할 때 부터까지 무언가를 추가하면 첫 번째 행을 건너 뜁니다. 루프가 0 (첫 번째 키)에서 시작하도록 실행 한 후 $ i를 증가시킵니다. 루프를 들어

이 좋은하지 않습니다 : 대신 수행하여 기능 then.compact와 깔끔한에 대한

$query=mysql_query(' --mysql --- '); 


while ($row=mysql_fetch_array($query)){ 

$v[]=$row["dbcolumn"]; 

} 

반환 $의 V. 키 이름이 유일한 경우 (예 : 기본 ID) 연관 배열을 만들 수 있습니다. $ v [ "$ priid"] = $ row [1];

+0

올바르지 않습니다. 그들이 사용하는 루프는 첫 번째 행을 올바르게 가져 오지만 * 초 *는 건너 뜁니다. –