PHP查询多个表

时间:2009-10-26 20:35:52

标签: php sql mysql

我无法从此查询中获取任何信息。谁知道我哪里出错?

谢谢!

 $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'];


 }

5 个答案:

答案 0 :(得分:4)

使用mysql_fetch_assoc()而不是mysql_fetch_array()。 在循环中使用列名作为数组键:

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

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

}

在您的查询中尝试在select语句上更具体,尽量不要使用*。

答案 1 :(得分:2)

您可能会收到错误,因为您正在对查询中不存在的字段进行排序(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'];


 }

答案 2 :(得分:0)

优良作法是在查询中指定列名而不是使用* - 在某些数据库上存在性能影响,并且可以防止表更改中出现任何意外行为。

在示例中,我认为问题是来自您正在使用的数组键 - 您不需要在其中包含表名,只需要包含列名:

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

答案 3 :(得分:0)

更好的做法是在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'];

}

答案 4 :(得分:0)

我使用 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'];
}

?>