2012-12-28 2 views
1

저는 현재 코드에서 나중에 사용하는 변수에 값을 할당하는 쿼리를 while 루프를 사용하는 습관이 있습니다. 가끔씩, 이것은 데이터베이스의 여러 테이블에서 원하는 출력을 모두 모으는 데 필요한 모든 변수를 모으기 위해 while 루프 전체를 사용하기 때문에 어리석은 경우가 있습니다. 저는 아직 PHP에 익숙하지 않아서 pdo를 사용하기 시작했습니다. 그러나, 필자는 필요한 값을 내 변수에 할당하는 더 나은 방법을 알지 못합니다. 아래의 코드는 내가 말하는 것에 대한 아주 짧은 예입니다. 제 영어가 가난한 경우를 대비해서 명확하게 설명합니다. 아래 코드는 가비지지만 예제입니다. 나는 이것에 대한 어떤 제안, 방향, 통찰력에 대해서도 크게 감사한다. 고마워요!while 루프에서 변수 값을 할당하는 대신?

<?php 
$stmt = $core->dbh->prepare("SELECT `user` FROM `buddies` WHERE `id` = ?"); 
     $stmt->bindParam(1, $id); 
     $stmt->execute(); $u = ""; $fname = ""; $lname = ""; $burger = ""; 
     while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
      $u = $row['user']; 
      $stm = $core->dbh->prepare("SELECT fname,lname FROM `users` WHERE id = ?"); 
      $stm->bindParam(1, $u); 
      $stm->execute(); 
      while ($rot = $stm->fetch(PDO::FETCH_ASSOC)){ 
       $fname = $rot['fname']; $lname = $rot['lname']; 
       $st = $core->dbh->prepare("just another query that uses the last values assigned to variables returns") 
           $st->bindParam(1, $variable) 
           $st->execute 
           $burger = $st->fetchColumn(); 
      }//end of the second while loop of this function 
     } //end of while statement 

echo $u." - ".$fname." ".$lname." text: ".$burger; 

?> 
+0

테이블이 잘 구성된 경우 조인을 사용하여 단 하나의 쿼리에서 훨씬 많은 데이터를 얻을 수 있습니다. –

+0

외부 조인을 사용하여 SQL에 일부를 푸시하고 한 번 반복하여 단일 데이터 구조를 작성해야합니다. 가지고있는 코드는 복잡하지만 n + 1 스타일의 중첩 쿼리로 인해 성능 문제가 발생할 수 있습니다. –

+0

왜 다른 쿼리에 가입하지 않으시겠습니까? 첫 번째 2 개의 질의는'SELECT users.fname, users.lname 사용자가 사용자 인 사용자로 INNER JOIN 사용자가 될 수 있습니다. users.id = user.user WHERE user.id =? ' – kennypu

답변

1

JOINs을 사용하십시오.

예를 들어, 당신은 여전히 ​​시나리오에 따라 변수 할당을 사용 할 수 있습니다

SELECT buddies.user, users.fname, users.lname FROM buddies JOIN users ON buddies.id=users.id 

처럼 처음 두 쿼리를 병합합니다. 그러나 확실히 while 루프의 수를 줄일 수 있습니다. 테이블에 공통 필드가있을 가능성이 높다면 거기에 연관이 있고 JOIN이 이동하는 방법입니다.

+0

와우, 멋지다! 나는이 JOIN 것에 대해 더 많이 읽을 것입니다. 나는 실제로 그것을 결코 듣지 않았다. 고마워요. –

+0

+1 질문을 던지면서 질문에 어긋나지 않게 적절한 방법을 제안합니다. –

관련 문제