SQL LEFT JOIN没有重复相同的行值

时间:2014-10-18 16:54:34

标签: php mysql sql join

我想知道是否有人可以帮我解决我的问题如下: 我想拉一次属于那个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

4 个答案:

答案 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_pa​​cket的值。

答案 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。

您不应该编写复杂的查询,因为这会使您的业务变得更复杂,并且您将来也不会维护您的代码。