这是我的查询。
$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
}
}
?>
另一个更新
一切正常。这个问题已经解决了。感谢大家的帮助!对于将来加入桌面问题的其他人,我想提一下检查你的桌子并确保它们不是空的;这就是为什么它为我显示空白。
答案 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");
问题是:
posts
子句中的FROM
之后的额外逗号。user_id
在where
子句中不明确,您希望使用其中一个连接表来引用列。post_id
在order 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