我有一个论坛,用户可以发帖提问,也可以发表评论和推文。
我希望得到每个帖子的所有comments
和tweets
。
我之前做的是在3组查询中做到这一点。
$data = mysqli_query($con,"select * from posts");
while($row = mysqli_fetch_assoc($data)){
$pid = $row['post_id'];
$dataCo = mysqli_query("SELECT comments.* FROM comments WHERE post_id = $pid");
$dataTw = mysqli_query("SELECT tweets.* FROM tweets WHERE post_id = $pid");
//2 while loop for comments and tweets
}
任何人都可以告诉我如何在单个查询中执行这些操作,因为如果在第一个查询中获得了大量posts
,则会有很多查询要执行。< / p>
OR
也许有更快的方法吗?
答案 0 :(得分:0)
也许你可以使用Mysql IN子句
http://www.tutorialspoint.com/mysql/mysql-in-clause.htm
在您的示例中,您始终对DB进行2 * n + 1次查询。其中n在此查询中返回的行数
$data = mysqli_query($con,"select * from posts");
如果使用mysql IN Clause,则只有3个查询。
您的查询应该是
$dataCo = mysqli_query("SELECT comments.* FROM comments WHERE post_id IN (1,2,3,4)");
$dataTw = mysqli_query("SELECT tweets.* FROM tweets WHERE post_id IN (1,2,3,4)");
您的第一个问题中返回的数字“1,2,3,4”是post_id。