这是加入表格的正确方法吗?

时间:2014-03-27 05:10:27

标签: php mysql join pdo html-table

这是我的查询。

$getdata = $conn->prepare("SELECT * FROM posts,
    INNER JOIN users ON posts.user_id = users.id 
    INNER JOIN address ON posts.user_id = address.user_id
    INNER JOIN favorites ON posts.user_id = favorites.user_id

    WHERE user_id = {$userid} ORDER BY post_id"); 

这是加入多个表的正确方法吗?它似乎对我不起作用。

更新

以下是查询中的更新。

$sth = $dbh->prepare("SELECT users.*, avatars.*, posts.*, favorites.* FROM posts
    INNER JOIN users ON posts.user_id = users.id
    INNER JOIN avatars ON posts.user_id = avatars.user_id
    INNER JOIN favorites ON posts.user_id = favorites.user_id
    ORDER BY posts.post_id");

$sth->execute();

$rows = $sth->fetchAll();

if(count($rows) > 0) {

    foreach($rows as $row) {

        ?><h1><?php echo $row['post_id']; ?></h1><?php
        ?><h1><?php echo $row['id']; ?></h1><?php
        ?><h1><?php echo $row['avatar_thumb']; ?></h1><?php
        ?><h1><?php echo $row['title']; ?></h1><?php
        ?><h1><?php echo $row['username']; ?></h1><?php

    }
}
?>

另一个更新

一切正常。这个问题已经解决了。感谢大家的帮助!对于将来加入桌面问题的其他人,我想提一下检查你的桌子并确保它们不是空的;这就是为什么它为我显示空白。

3 个答案:

答案 0 :(得分:2)

几乎没有问题:

$getdata = $conn->prepare("SELECT * FROM posts 
    INNER JOIN users ON posts.user_id = users.id 
    INNER JOIN address ON posts.user_id = address.user_id
    INNER JOIN favorites ON posts.user_id = favorites.user_id
    WHERE users.id = {$userid} ORDER BY posts.id");

问题是:

  1. posts子句中的FROM之后的额外逗号。
  2. user_idwhere子句中不明确,您希望使用其中一个连接表来引用列。
  3. post_idorder by子句中是不明确的,您希望使用其中一个连接表来引用列。

答案 1 :(得分:0)

不,您需要提及从哪个表中选择什么,因为您从多个表中选择数据。

$getdata = $conn->prepare("SELECT posts.*, users.* FROM posts
    INNER JOIN users ON (posts.user_id = users.id )
    INNER JOIN address ON (posts.user_id = address.user_id )
    INNER JOIN favorites ON (posts.user_id = favorites.user_id )

    WHERE user_id = users.$userid ORDER BY posts.post_id "); 

答案 2 :(得分:0)

似乎user_id会导致含糊不清,因为您的所有表都有user_id作为公共字段。因此,在使用您的查询时,需要提及您要从哪个表中检查数据

WHERE posts.user_id = {$userid} ORDER BY post_id