首页 > 解决方案 > MYSQL RIGHT JOIN 和 PHP

问题描述

我有三张桌子:

通过第三张表,我将用户与中心联系起来,因为 1 个用户可以参加不同的中心。

有了这个 SELECT 我得到了我想要的结果:

 SELECT *
 FROM `userInCenter`
 RIGHT JOIN `user` ON `user`.`id_user` = `userInCenter`.`id_user`
 ";

通过这个查询,我得到:

在此处输入图像描述

所以,这实际上是相当不错的,并且几乎达到了我想要的。

唯一的是,如果一个用户有两个中心,我的查询会创建两行。

但是,我想要的是显示一行并在同一字段中显示中心:8,7。像这样。

这可能吗?还是我必须改变一些东西?

小提琴: http ://sqlfiddle.com/#!9/0fed10/2

PHP:

        <?php 
    while ($row=mysqli_fetch_object($listaDeUsuarios)){

        $id_usuario=$row->id_usuario;
        $nombreUsuario=$row->nombreUsuario;
        $apellidoUsuario=$row->apellidoUsuario;
        $emailUsuario=$row->emailUsuario;
        $ciudadUsuario=$row->ciudadUsuario;
        $createdAt=$row->createdAt;
        $id_centroDeportivo=$row->id_centroDeportivo;
         ?>

在此先感谢亚历杭德罗。

标签: phpmysql

解决方案


<?php
$con = mysqli_connect("localhost", "root", "", "gymtable_test");

//Retrieving the contents of the table
$res = mysqli_query($con, "SELECT ucd.id_usuarioCentroDeportivo, ucd.id_usuario, GROUP_CONCAT(ucd.id_centroDeportivo SEPARATOR ',') AS id_centroDeportivo, ucd.rolUsuarioCentro, ucd.createdAt, u.*
FROM usuarioCentroDeportivo ucd
RIGHT JOIN usuario u ON u.id_usuario = ucd.id_usuario
GROUP BY ucd.id_usuario");

//Fetching all the rows as objects
while ($row=mysqli_fetch_object($res)){
    $id_usuario=$row->id_usuario;
    $nombreUsuario=$row->nombreUsuario;
    $apellidoUsuario=$row->apellidoUsuario;
    $emailUsuario=$row->emailUsuario;
    $ciudadUsuario=$row->ciudadUsuario;
    $createdAt=$row->createdAt;
    $id_centroDeportivo=$row->id_centroDeportivo;
    // do something with the variables
}
//Closing the statement
mysqli_free_result($res);

//Closing the connection
mysqli_close($con);

GROUP BY 将具有相同用户 ID (ucd.id_usuario) 的行组合在一起,然后 GROUP_CONCAT 显示每个用户 ID 的所有中心,用逗号分隔。


推荐阅读