2013-08-26 76 views
0

我有這個頁面,這是一個快速瀏覽的登錄用戶配置文件,以及一些編輯功能,所以爲了避免混淆我會發布所有的代碼,只是忽略HTML 。多個SQL查詢到多個陣列

在代碼的開始,我檢索用戶信息,然後將其存儲到名爲$ row的數組中。後面的代碼中,我從單獨的表中檢索行,並且我想將它們存儲到數組中($ postRow)。但是我只是通過閱讀發現,只能在每個頁面上執行一個SQL查詢,而無需運行我非常坦率地不理解的代碼,並且我發現有關該問題的代碼的唯一小技巧將信息直接打印到頁面上,我無法找到如何將它們存儲到數組中。有人可以幫我解決這個問題嗎?我真的是在一個困難的地方。

<?php 
    include('header.php'); 
    if (isset($_SESSION['username'])){ 
     require 'connect.php'; 

     $user = $_SESSION['username']; 

     $query = mysqli_query($connect, "SELECT * FROM users WHERE username='$user';", MYSQLI_USE_RESULT); 
     $row = mysqli_fetch_assoc($query); 
     ?> 
     <h4>BlogHub > Profile > <?php echo $row['fname']." ".$row['lname']; ?></h4> 
     <div id="profileAva"> 
      <img src="<?php echo $row['avatar']; ?>" /> 
     </div> 
     <h5 id="infoDisp" style="margin:3px;"><?php echo "ID #".$row['ID']." - ".$row['fname']." ".$row['lname']." - ".$row['username']." - ".$row['email']." - ".$row['posts']." Posts"; ?></h5> 
     <?php 
     $id = $row['ID']; 
     $recentPost = mysqli_query($connect, " 
     SELECT * 
     FROM `blog_posts` 
     WHERE poster_id='$id' 
     LIMIT 1 
     ", MYSQLI_USE_RESULT); 
     $postRow = mysqli_fetch_assoc($recentPost); 
     ?> 
     <p></p> 
     <div id="changeAva"> 
      <button class="cancelQuery">x</button> 
      <center> 
      <form style="padding-top:20px;" class="boxI" enctype="multipart/form-data" action="changeAva.php" method="POST"> 
       <input style="padding-bottom:15px;" type="file" value="Choose a Avatar" name="file"/><br /> 
       <button type="Submit">Submit</button> 
      </form> 
      </center> 
     </div> 
     <div id="changeInfoBox"> 
      <button class="cancelQuery">x</button> 
      <center> 
       <form action="changeInfo.php" method="POST"> 
        First Name: <input type="text" name="fname" value="<?php echo $row['fname']; ?>" /><br /> 
        Last Name: <input type="text" name="lname" value="<?php echo $row['lname']; ?>" /><br /> 
        Email: <input type="text" name="email" value="<?php echo $row['email']; ?>" /><br /> 
        <button type="submit">Submit</button> 
       </form> 
      </center> 
     </div> 
     <?php 
    } 
    else { 
     echo "<center><p>You need to be logged in to view this page.</p></center>"; 
    } 
    include('footer.php'); 
?> 

回答

0

腳本執行過程中執行的查詢數沒有限制。然而,沒有理由不能在單個查詢中獲得這些信息。您將使用JOIN來執行此操作。

這可能是這樣的:

SELECT bp.* 
FROM users AS u 
INNER JOIN blog_posts AS bp 
    ON u.id = bp.poster_id 
WHERE u.username = '?' 

你給對方的回答評論提及的具體問題是,因爲你需要使你的下一個查詢之前調用mysql_free_result()

+0

但是,如果我只想從該用戶發佈最新帖子(1篇文章),我還需要使用INNER JOIN嗎? –

+0

呵呵,你的MYSQL_USE_RESULT讓我回來了,謝謝邁克。欣賞它。 –

+0

@GeorgeColeman如果您的輸入是用戶名(在用戶表上),但是您在'blog_posts'中查找的數據,那麼如果您想通過單個查詢獲取此數據,則需要進行連接,而不是在像你這樣的兩個查詢目前正在做。 –