only shows me the first record of my query

1

Hello friends I have a problem with my query, it turns out that I am making a query with related tables my table: inscription_projects I relate it to my table: inscription_students by means of the id of the inscription_projects table and that id I keep it in the inscription_alumins table with the name idinscripcionproyecto that is to know how many students belong to that project now the only problem that my query has is that if there are three students enrolled in 1 project only shows me the first student and it should not be because if there are three or more students enrolled to that project should show students who are registered to the project annex my query to know what I'm doing wrong.

    $id= $_GET['id'];
$sql = "SELECT 
inscripcion_proyectos.id, 
inscripcion_proyectos.idcodificacion_proyectos,
inscripcion_proyectos.titulo_proyecto,
inscripcion_proyectos.iddepartamentos,
inscripcion_proyectos.idprofesor,
inscripcion_proyectos.idusuarios,
inscripcion_alumnos.idinscripcion_proyectos,
inscripcion_alumnos.cedula AS cedulaA,
inscripcion_alumnos.nombres AS nombresA,
inscripcion_alumnos.apellidos AS apellidosA,
profesores.cedula AS cedulaP,
profesores.nombres AS nombresP,
profesores.apellidos AS apellidosP,
usuarios.cedula,
usuarios.nombres,
usuarios.apellidos
FROM inscripcion_proyectos INNER JOIN inscripcion_alumnos AS inscripcion_alumnos ON 
inscripcion_proyectos.id=inscripcion_alumnos.idinscripcion_proyectos 

INNER JOIN profesores AS profesores ON inscripcion_proyectos.idprofesor=profesores.cedula

INNER JOIN usuarios ON inscripcion_proyectos.idusuarios=usuarios.cedula

WHERE inscripcion_proyectos.id='$id' GROUP BY idcodificacion_proyectos";
    
asked by yoclens 08.12.2016 в 19:23
source

2 answers

2

I made a sample query based on your query and effectively as @ecarrizo says the group by is what you are doing that you only see a record.

Annex the example query that I did in case it helps you:

declare @inscripcion_proyectos as table(
    id int,
    idcodificacion_proyectos int,
    titulo_proyecto nvarchar(max),
    iddepartamentos int,
    idprofesor int,
    idusuarios int
); 
insert into @inscripcion_proyectos values (1,1,'Proyecto 1', 1,6111,7111)
insert into @inscripcion_proyectos values (2,1,'Proyecto 2', 1,6333,7222)
insert into @inscripcion_proyectos values (3,1,'Proyecto 3', 1,6222,7111)
insert into @inscripcion_proyectos values (4,1,'Proyecto 4', 1,6111,7333)
insert into @inscripcion_proyectos values (5,1,'Proyecto 5', 1,6222,7222)
insert into @inscripcion_proyectos values (6,1,'Proyecto 6', 1,6111,7111)
insert into @inscripcion_proyectos values (7,1,'Proyecto 7', 1,6111,7333)
insert into @inscripcion_proyectos values (8,1,'Proyecto 8', 1,6333,7111)


declare @inscripcion_alumnos as table(
    idinscripcion_proyectos int,
    cedula int,
    nombres nvarchar(max),
    apellidos nvarchar(max)
); 
insert into @inscripcion_alumnos values (1,5111,'Alumno 1', 'Alumno apellido 1')
insert into @inscripcion_alumnos values (2,5112,'Alumno 2', 'Alumno apellido 2')
insert into @inscripcion_alumnos values (3,5113,'Alumno 3', 'Alumno apellido 3')
insert into @inscripcion_alumnos values (1,5114,'Alumno 4', 'Alumno apellido 4')
insert into @inscripcion_alumnos values (1,5115,'Alumno 5', 'Alumno apellido 5')

declare @profesores as table(
    cedula int,
    nombres nvarchar(max),
    apellidos nvarchar(max)
); 
insert into @profesores values (6111,'Profesores 1', 'Profesores apellido 1')
insert into @profesores values (6222,'Profesores 2', 'Profesores apellido 2')
insert into @profesores values (6333,'Profesores 3', 'Profesores apellido 3')

declare @usuarios as table(
    cedula int,
    nombres nvarchar(max),
    apellidos nvarchar(max)
); 
insert into @usuarios values (7111,'Usuario 1', 'Usuario apellido 1')
insert into @usuarios values (7222,'Usuario 2', 'Usuario apellido 2')
insert into @usuarios values (7333,'Usuario 3', 'Usuario apellido 3')

SELECT 
    ip.id, 
    ip.idcodificacion_proyectos,
    ip.titulo_proyecto,
    ip.iddepartamentos,
    ip.idprofesor,
    ip.idusuarios,
    ia.idinscripcion_proyectos,
    ia.cedula AS cedulaA,
    ia.nombres AS nombresA,
    ia.apellidos AS apellidosA,
    p.cedula AS cedulaP,
    p.nombres AS nombresP,
    p.apellidos AS apellidosP,
    u.cedula,
    u.nombres,
    u.apellidos
FROM 
    @inscripcion_proyectos as ip
    inner JOIN @inscripcion_alumnos AS ia
        ON ip.id=ia.idinscripcion_proyectos 
    inner JOIN @profesores AS p 
        ON ip.idprofesor=p.cedula
    inner JOIN @usuarios as u
        ON ip.idusuarios=u.cedula
WHERE ip.id= 1
--GROUP BY idcodificacion_proyectos

NOTE: Take into account the left join, with the inners you force the data exist in both tables, if they do not exist in some then it will not show you the information, with the left join if it shows information but with null values for tables where the relationship was not found.

Greetings.

    
answered by 09.12.2016 / 00:20
source
1

The problem of your query is in the GROUP BY group, it only brings you one entry for the project "X" because all the entries have the same value in idcodificacion_proyectos.

Note that if any of the INNER JOIN fails, that row will not be displayed (eg, if you do not have assigned teachers, but if students and vice versa), in case either of them is optional you should use LEFT JOIN .

Also, as a tip, you should never trust the data sent from the user (in this case id) and escape to avoid SQL Injection.

The easiest way to do it is using PDO, link

    
answered by 08.12.2016 в 21:06