我不确定标题是否准确表达了问题。无论如何,这是解释:
我有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>";
}
答案 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=?