2012-12-28 42 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

如果你的表格结构合理,你可能只需要在一个使用连接的查询中获得更多的数据。 – 2012-12-28 03:32:42

+0

您应该将其中一部分用外连接插入SQL中,然后循环一次并创建单个数据结构。您拥有的代码不仅令人费解,而且由于嵌套的n + 1样式查询而受到可怕的性能问题。 –

+0

你为什么不加入不同的查询?你的第一个2个查询可以很容易'SELECT users.fname,users.lname FROM users as users INNER JOIN user as user ON 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不要盲目追踪问题,因为它被问到,但建议正确的方法。 –