我想知道是否有人可以帮我解决我的问题如下: 我想拉一次属于那个posts.text的posts.text和uids但是当我执行下面的代码时它会这样做:例如。有4个uid属于帖子所以我得到posts.text四次而不是一次。
$query = mysqli_query($con,
"SELECT posts.text, relationships.uidb
FROM posts
LEFT JOIN relationships
ON posts.uid=relationships.uida
LIMIT 10");
if(mysqli_num_rows($query) > 0){
while($row = mysqli_fetch_assoc($query)){
echo $row['text']." ".$row['uidb']."<br>";
}
}
我真的很感激任何帮助。 谢谢你的提前。 彼得
更新: 期望的输出将是这样的:
postsArray[0]->text = //post text
postsArray[1]->text = //another post text
postsArray[0]->uids[0] = //approved uid for first post
postsArray[0]->uids[1] = //another approved uid for first post
现在它输出: 文字10 文字15 第12条
我想要这个: 文字10,15,12
答案 0 :(得分:3)
一种方法是使用Mysql的GROUP_CONCAT
,它为每个组提供逗号分隔值列表,即(p.uid)
$query = mysqli_query($con,
"SELECT p.text, GROUP_CONCAT(r.uidb SEPARATOR ', ') uidbs
FROM posts p
LEFT JOIN relationships r
ON p.uid=r.uida
GROUP BY p.uid
LIMIT 10");
if (mysqli_num_rows($query) > 0) {
while ($row = mysqli_fetch_assoc($query)) {
echo $row['text'].' '.$row['uidbs'];
/*$uidbs= explode($row['uidbs'],',');
foreach ($uidbs as $key => $val) {
echo $val.' ';
}*/
echo '</br>';
}
}
根据文档结果被截断为最大长度 由group_concat_max_len系统变量给出,该变量有一个 默认值为1024.虽然可以设置更高的值 返回值的有效最大长度受到约束 max_allowed_packet的值。
答案 1 :(得分:0)
也许这对你有用:
$query = mysqli_query($con,
"SELECT posts.text, relationships.uidb
FROM posts
LEFT JOIN relationships
ON posts.uid=relationships.uida
GROUP BY posts.uid
LIMIT 10");
if(mysqli_num_rows($query) > 0){
while($row = mysqli_fetch_assoc($query)){
echo $row['text']." ".$row['uidb']."<br>";
}
}
答案 2 :(得分:0)
SELECT posts.text, relationships.uidb
FROM posts
LEFT JOIN relationships
ON posts.uid=relationships.uida
GROUP BY posts.primary_key_of_your_post
LIMIT 10
答案 3 :(得分:-1)
您应该拨打2个查询。在第一个查询中,调用文本,然后调用uids。
您不应该编写复杂的查询,因为这会使您的业务变得更复杂,并且您将来也不会维护您的代码。