Php 多表、多语句

Php 多表、多语句,php,mysql,Php,Mysql,让我们看3张有大量行的表: TABLE Posts PostPID PostUID PostText TABLE Users UserUID UserName TABLE Favorites FavoriteUID FavoritePID 现在,为了获得所有最近的帖子,我执行了如下查询: SELECT p.PostPID, p.PostUID, p.PostText, u.UserUID, u.UserName FROM Posts AS p JOIN Use

让我们看3张有大量行的表:

TABLE Posts

PostPID
PostUID
PostText

TABLE Users

UserUID
UserName

TABLE Favorites

FavoriteUID
FavoritePID
现在,为了获得所有最近的帖子,我执行了如下查询:

SELECT p.PostPID, p.PostUID, p.PostText, u.UserUID, u.UserName
    FROM Posts AS p
        JOIN Users AS u
        ON p.PostUID = u.UserUID
    ORDER BY p.PostPID DESC
    LIMIT 0, 30

这很好用。现在我在想,我怎么可能只得到某个UserUID喜欢的帖子呢?因此,只有FavoriteUID=UserUID=X的子查询才能使用

...
Where p.PostUID in (select f.FavoritePID from Favorite f where f.FavoriteUID = UserUID)
...

您可以使用子查询

...
Where p.PostUID in (select f.FavoritePID from Favorite f where f.FavoriteUID = UserUID)
...

第二个join也会这样做

SELECT 
  p.PostPID, p.PostUID, p.PostText, u.UserUID, u.UserName
FROM 
  Posts AS p
JOIN 
  Users AS u ON p.PostUID = u.UserUID
Join 
  Favorites as f on f.FavoriteUID = u.UserUID and f.FavoritePID=p.PostPID
ORDER 
  BY p.PostPID DESC
LIMIT 0, 30

第二个join也会这样做

SELECT 
  p.PostPID, p.PostUID, p.PostText, u.UserUID, u.UserName
FROM 
  Posts AS p
JOIN 
  Users AS u ON p.PostUID = u.UserUID
Join 
  Favorites as f on f.FavoriteUID = u.UserUID and f.FavoritePID=p.PostPID
ORDER 
  BY p.PostPID DESC
LIMIT 0, 30

您应该按照下面的建议使用连接。我错过了大量的唱片部分。在这种情况下,子查询将很慢。同意。在操作中,成本更高。您应该按照以下建议使用连接。我错过了大量的唱片部分。在这种情况下,子查询将很慢。同意。运营成本更高