簡體   English   中英

PHP查詢多個表

[英]PHP query multiple Tables

我無法從此查詢中獲取要顯示的任何信息。 有誰知道我哪里出錯了?

謝謝!

 $query =   "SELECT * ".
            "FROM comments, users ".
            "WHERE comments.user_id = users.user_id ".
            "ORDER BY comments.date DESC ".
            "LIMIT 10";

$result = mysql_query($query) or die(mysql_error());

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


  echo $row['users.user_id'];
  echo $row['comments.comment'];


 }

使用 mysql_fetch_assoc() 而不是 mysql_fetch_array()。 在循環中使用列名作為數組鍵:

while ($row = mysql_fetch_assoc($result)) {

  echo $row['column_name1'];
  echo $row['column_name1'];

}

在您的查詢中盡量對 select 語句更加具體,盡量不要使用 *.

您可能會收到錯誤消息,因為您正在對查詢中不存在的字段進行排序 (ORDER BY)。

最好不要使用“SELECT *”查詢。 如果您只需要特定值,請指定它們。 這也有助於檢索數據...

$query =   "SELECT users.user_id, comments.comment, comments.date ".
                        "FROM comments, users ".
                        "WHERE comments.user_id = users.user_id ".
                        "ORDER BY comments.date DESC ".
                        "LIMIT 10";

$result = mysql_query($query) or die(mysql_error());

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


  echo $row['user_id'];
  echo $row['comment'];
  echo $row['date'];


 }

在查詢中指定列名而不是使用 * 是一種很好的做法 - 在某些 DB 上會影響性能,並且在所有情況下都可以防止因表更改而出現任何意外行為。

在示例中,我認為問題出在您使用的數組鍵上 - 您不需要在其中包含表名,只需包含列名:

  echo $row['user_id']; 
  echo $row['comment'];

更好的做法是在 sql 查詢中只編寫您需要的字段,如下所示:

$query =   "SELECT u.user_id uid, c.comment comment ".
                    "FROM comments c, users u ".
                    "WHERE comments.user_id = users.user_id ".
                    "ORDER BY comments.date DESC ".
                    "LIMIT 10";

使用此類查詢可以減少執行查詢和將數據從數據庫服務器傳輸到 php 腳本的時間。 在此修改后,您的循環轉換為:

while ($row = mysql_fetch_array($result)) {
 echo $row['uid'], $row['comment'];

}

我使用 PDO 方法,但這也適用於您:

<?php
  $sql = "SELECT * FROM comments as c INNER JOIN users as u ON  c.user_id=u.user_id WHERE u.user_id=:user_id ORDER BY c.date DESC LIMIT 10";
  

  //prepare the connection to database
  $prep = $conn->prepare($sql);

  //change the parameters for user_id on WHERE condition you can put anything you want but i will put the user session id
  $prep->bindParam(":user_id", $_SESSION['user_id']);
  $prep->execute();

 //ill use fetchAll function because it can be more than 1 comment
 $datas = $prep->fetchAll();

foreach($datas as $data){
  echo $data['user_id'];
  echo $data['comment'];
  echo $data['date'];
}

?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM