2017-06-28 88 views
0

我试图从4个表中提取数据。当我从MySQL表中的3(user_table,posts,followers)提取数据时,数据检索得很好。它当我试图从第四表(post_likes)拉特定的列,我遇到问题。所有的数据根本不显示。PDO:无法从MySQL中的第4个表中提取数据

这里的数据库结构:

USER_TABLE:user_id, username, name

帖子:post_id, body, user_id, likes

追随者:follower_id, user_id, follower_id

post_likes:likes_id, post_id, user_id

连接脚本:

class DB { 

     private static function connect() { 
       $pdo = new PDO ('mysql:host=localhost;dbname=test;charset=utf8','root',''); 
       $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
       return $pdo; 
     } 

     public static function query($query, $params = array()) { 
      $statement = self::connect()->prepare($query); 
      $statement->execute($params); 
      if (explode(' ', $query)[0] == 'SELECT') { 
      $data = $statement->fetchAll(); 
      return $data; 
      } 
    } 
    } 

脚本,从3代表的工作原理提取数据:

$posts = DB::query('SELECT posts.post_id, posts.body, posts.likes, 
users_table.username, users_table.name FROM users_table, posts, followers 
WHERE posts.user_id = followers.user_id 
AND users_table.user_id = posts.user_id 
AND follower_id = :userid 
ORDER BY posts.posted_at DESC', array(':userid'=>$userid)); 

脚本不从4桌工作拉动数据:

$posts = DB::query('SELECT posts.post_id, posts.body, post_likes.post_id, 
post_likes.user_id, posts.likes, users_table.username, users_table.name 
FROM users_table, posts, followers, post_likes 
WHERE posts.user_id = followers.user_id 
AND users_table.user_id = posts.user_id 
AND follower_id = :userid 
ORDER BY posts.posted_at DESC', array(':userid'=>$userid)); 

任何帮助,我能为这个? thanx

+1

从等式中删除PDO和测试上的MySQL查询直。是否返回任何数据?这听起来像查询只是导致零记录。什么记录在没有WHERE条款的情况下返回?这些表如何加入?提示:显式连接比隐式连接更容易管理。不要用逗号分隔表格,而要使用实际的'JOIN'子句。也许隐式连接没有达到你期望的效果。 – David

回答

0

做正确的方法是:

SELECT 
posts.post_id, posts.body, post_likes.post_id, 
post_likes.user_id, posts.likes, users_table.username, users_table.name 
FROM 
users_table 
inner join posts on users_table.user_id = posts.user_id 
inner join followers on posts.user_id = followers.user_id 
inner join post_likes on post_likes.id = <your condition> 
WHERE 
follower_id = :userid 
ORDER BY posts.posted_at DESC 

我们假设follower_id列只存在于表中其他含糊不清的错误1将被抛出

+0

thanx。这工作 – user2938948

1

4表查询失败的原因是由于在查询中添加了post_likes表,但未提供从当前数据集到post_likes表的任何链接。

注意所有where子句将您的表链接在一起。在你的post_likes表中没有where子句链接。

我asummption是你需要更新你的WHERE子句这样的:

WHERE posts.user_id = followers.user_id 
AND post_likes.post_id = posts.post_id //Link post_likes here 
AND users_table.user_id = posts.user_id 
AND follower_id = :userid 

编辑:正如大卫指出你应该用实际连接的命令。

+0

这仍然给我相同的结果 – user2938948