在while循环中查询重复2个表的结果

时间:2015-04-20 01:42:15

标签: php mysql

我不确定标题是否准确表达了问题。无论如何,这是解释:

我有2个表,第一个包含用户ID,另一个包含帖子。

第一个查询从第一个表中选择用户ID,并在第二个表中循环查找用户(ID)帖子。

问题是当查询找到例如。在第一个表中有5个结果(用户ID 1,6,999等),然后它循环5次以在第二个表中搜索,即使实际结果是仅由用户1和6创建的2个帖子,它也会显示5个结果。 我该如何避免这种重复?

以下是代码:

$stmt = $conn->prepare('select userid from table where para=?');
$stmt->bind_param('i', $para);
$stmt->execute();
$result = $stmt->get_result();
while( $row = $result->fetch_assoc()) {

$userid  = $row["userid "];

$qname = "select postid,title from  posts where uid='$userid'";
$result2 = $conn->query($qname);
$row2 = $result2->fetch_array(MYSQLI_ASSOC);
if ($row2 > 0) { 
$postid= $row2['postid'];
$title= $row2['title'];
}
echo $postid." ".$title."<br>";
}

3 个答案:

答案 0 :(得分:1)

尝试

$ qname =&#34;选择postid,帖子标题为P左连接表,T为T.userid = P.uid,其中para =?&#34 ;;

或者 您可以在循环期间将结果存储在公共数组中。 喜欢

$tempResult = array();
while( $row = $result->fetch_assoc()) {

$userid  = $row["userid "];

$qname = "select postid,title from  posts where uid='$userid'";
$result2 = $conn->query($qname);
$row2 = $result2->fetch_array(MYSQLI_ASSOC);
    if ($row2 > 0) { 
    $tempResult[$userid][] = $row2['postid'];
    $tempResult[$userid][] = $row2['title'];
    }

}

答案 1 :(得分:1)

您可以通过仅运行一个joins两个表的查询来避免它。像这样:

<?php
  $stmt = $conn->prepare('select posts.* from table t inner join posts p on t.userid = p.uid where t.para = ? order by uid');
$stmt->bind_param('i', $para);
$stmt->execute();
$result = $stmt->get_result();
while( $row = $result->fetch_assoc()) {
   // $row now has userid, and all post details
}
?>

答案 2 :(得分:1)

您可以使用JOIN MYSQL尝试此查询。

SELECT u.userid,p.postid,p.title FROM TABLE `user` u
JOIN posts p ON
p.uid = u.userid
WHERE para=?