Query en mysql

Query en mysql

de Rosalba Correa -
Número de respuestas: 17

Buenos días.

Tengo algunos sitios funcionando con moodle para colegios.

Me han pedido sacar nombres completos, usuario y grado  de las personas registradas en el sistema, la base de datos es mysql, he pensado hacer un query de la tabla mdl_users y la tabla mdl_ courses, pero la verdad no se cómo hacerlo.

A quien me pueda colaborar mil gracias de antemano.

Promedio de valoraciones: -
En respuesta a Rosalba Correa

Re: Query en mysql

de Alvaro Fito -

Es una buena idea, yo te puedo ayudar si sé las tablas, cosa que no tengo ni idea...pero mas o menos me lo imagino.

Primeramente para una query hay que poner Select luego From que es la tabla donde deseamos sacar la información. así que mas o menos será algo así.

Select "nombre", "apellidos", "nombre_usuario", "grado"

From mdl_users

ya ta...así quedaria la query. en todo caso si hay que unir las dos tablas el from quedaria así

From mdl_users u INNER JOIN mdl_courses c ON u."claveprincipal"=c."claveprincipal"

ya ta...

Bueno espero haberte servido de ayuda.

Un saludo.

En respuesta a Alvaro Fito

Re: Query en mysql

de Rosalba Correa -

Hola Alvaro muchas gracias por tu ayuda, lo hice asi:

SELECT `id`, `username`, `password`, `firstname`, `lastname`,`name`
FROM mdl_user u INNER JOIN mdl_course_categories c ON u.`id`=c.`id`;

 

pero no me funciona sale el siguiente "error"

#1052 - Column 'id' in field list is ambiguous

SELECT `id` , `username` , `password` , `firstname` , `lastname` , `name`
FROM mdl_user u
INNER JOIN mdl_course_categories c ON u.`id` = c.`id`
LIMIT 0 , 30

El error se produce porque para poder relacionar las dos tablas debe haber un campo igual en estás, yo las relacioné por el id pero el id de categorias no es el mismo que el de usuarios, cada id corresponde a algo diferente. Revise las tablas y no hay ningún campo en común, entonces no se que hacer.

Muchas gracias por tu colaboración.

En respuesta a Rosalba Correa

Re: Query en mysql

de Alvaro Fito -

Hola Rosalba

Por lo que he visto en la consulta, esta correcta prueba con poner cada campo con la tabla correspondiente es decir algo así

SELECT u.id, u.username, u.password, u.firstname, u.lastname, u.name
FROM mdl_user u
INNER JOIN mdl_course_categories c ON u.id = c.id
LIMIT 0 , 30

hay que poner delante el nombre de la tabla que estas sacando los datos. si id no esta en la otra tabla, busca algo que este similar, nombre, nose... también, por lo que he visto, supongo que los datos que estas sacando es de una tabla no?¿

Si es así prueba esta query:

SELECT id, username, password, firstname, lastname, name
FROM mdl_user
LIMIT 0 , 30

Espero que te sirva de ayuda.

Saludos

En respuesta a Alvaro Fito

Re: Query en mysql

de Rosalba Correa -

Hola de nuevo,

Mi consulta esta asi:

SELECT u.`id`, u.`username`, u.`password`, u.`firstname`, u.`lastname`,c.`name`
FROM mdl_user u INNER JOIN mdl_course_categories c ON u.`id`=c.`id`

el query funciona perfectamente, sólo que me trae 35 datos nada más, estoy usando dos tablas en una tabla esta el nombre, apellidos, usuario y contraseña, esta tabla se llama mdl_user, en otra tabla tengo las categorias y subcategorias que en mi caso son los grados, esta tabla se llama mdl_courses_categories, necesito sacar una lista donde aparezca, el nombre , apellidos, usuario, contraseña y grado por eso necesito unirlas para saber a que grado pertenece cada persona, en ambas tablas hay el campo id, solo que el id de la tabla user se refiere al id de cada usuario y el id de la tabla categories se refiere al id de cada sub_categoria que en mi caso es cada grado, por eso no se parecen en nada.

Funcionaria si en la tabla categories hubiera un campo con el id de cada usuario o viceverza es decir, que en la tabla user existiera el id de la categoria a la que pertenece cada usuario.

Me trae como 35 datos porque al comparar el id de categories con el id de user hay algunos iguales.

Si me pueden ayudar les agradezco, es urgente la verdad.

NOTA: No hay ningún campo en común dentro de las 2 tablas, por eso se me ha dificultado el query.

En respuesta a Rosalba Correa

Re: Query en mysql

de Rosalba Correa -

Buenas tardes, sigo con el mismo inconveniente, no se si alguien sabe como veo el modelo entidad relación MER de la base de datos de mysql que esta creada en moodle.

De antemano mil gracias.

En respuesta a Rosalba Correa

Re: Query en mysql

de Juan Jesús Gutiérrez García -
Hola Rosalba:
Yo creo que ERWin puede hacer lo que quieres usando la opción de reingeniería.
Suerte
Adiós
En respuesta a Juan Jesús Gutiérrez García

Re: Query en mysql

de Rosalba Correa -
Quién es ERWin??????????
En respuesta a Rosalba Correa

Re: Query en mysql

de Juan Jesús Gutiérrez García -
Es un software que es capaz de tomar una base de datos ya funcionando y generar el Diagrama Relacional con la información que hay en la base.
Gracias
Adiós
En respuesta a Rosalba Correa

Re: Query en mysql

de Alberto Rami -
No podes averiguar directamente que alumnos estan en que cursos, creo que la secuencia correcta de consultas que tendrias que realizar seria:
-averiguar el id del curso en la tabla mdl_course.
-averiguar el contexto del curso en la tabla mdl_context, donde instanceid=id course.
-con el id de contexto tendrias que consultar la tabla mdl_role_assignments preguntando por el roleid de alumnos osea el roleid 5, esto de va a devolver el userid que tendrias que crusarlo con la tabla user, id=userid

Espero que esto te sirva.

Carlos
En respuesta a Alberto Rami

Re: Query en mysql

de Alvaro Fito -

Con lo que la query te quedaria algo así.

SELECT u.`id`, u.`username`, u.`password`, u.`firstname`, u.`lastname`,c.`name`
FROM mdl_user u INNER JOIN mdl_course_categories c ON u.`id`=c.`id'

where u.roleid=5 AND u.id (id del curso) IN (SELECT (id del curso) FROM (tabla del curso))

Si no funciona así, ponme el E-R y te hago la query

Mucha suerte

Saludos

En respuesta a Alvaro Fito

Re: Query en mysql

de Rosalba Correa -

Hola, de antemano muchas gracias por tu colaboración.

Probe el que me enviste y me salen bastantes errores, el campo roleid no existe en la tabla mdl_user, y me dice que la sintaxis esta incorrecta.

No tengo el MER, no se si haya alguna forma de sacarlo.

Mil gracias.

Saludos.

En respuesta a Rosalba Correa

Re: Query en mysql

de Alvaro Fito -

En mysql...creo que si, pero no lo recuerdo exactamente donde. he revisado la query. el problema es que el reloid, es de la tabla mdl_role_assignments ( o algo así). la he mejorado.

Nota: donde pongo los parentesis son campos que desconozco, donde tienes tu que sustituirlos.

Query:

SELECT u.id, u.username, u.password, u.firstname, u.lastname,c.name
FROM mdl_user u
 INNER JOIN mdl_course_categories c ON u.id = c.id
 INNER JOIN mdl_role_assignments a ON c.(algo) = a.(algo)
WHERE a.roleid=5 AND (id del curso) IN (SELECT (id del curso) FROM (tabla del curso))

Enga espero que te sirva de ayuda.

Saludos.

En respuesta a Alvaro Fito

Re: Query en mysql

de Antonio Piedras -
Rosalba,
la consulta que quieres hacer se puede hacer así:

/*
contextlevel = 50 --> contexto para cursos
roleid = 5 --> rol de alumno
*/

SELECT u.id, u.username, u.password, u.firstname, u.lastname, c.fullname
FROM mdl_user u
INNER JOIN mdl_role_assignments a ON u.id = a.userid
INNER JOIN mdl_context t ON a.contextid = t.id
INNER JOIN mdl_course c ON t.instanceid = c.id
WHERE t.contextlevel = 50 AND a.roleid=5
order by u.lastname, u.firstname

Creo que con esto puedes resolver tu query.
Ahí te salen todos los cursos y todos los usuarios con el rol de alumno en algún curso.
Si quieres delimitar más la query, es poner mas condiciones en el WHERE.

Saludos.
En respuesta a Rosalba Correa

Re: Query en mysql

de Sandra Piedrabuena -
Hola Rosalba.
Fijate si este enlace te sirve
http://moodle.org/mod/forum/discuss.php?d=115539#p506901
Saludos.
En respuesta a Sandra Piedrabuena

Re: Query en mysql

de Esteban Naranjo -

Hola,

No se si pueda ayudar con este post, no recuerdo si fue aquí o en otro hilo que encontre un query para saber cuantos alumnos estan matriculados por cada curso, de ahi si modificas la consulta puedes obtener lo que quieres, esta es la consulta:

SELECT
cu.fullname AS Curso,
rl.name AS rol,
Count(r.userid) AS Alumnos
from mdl_role_assignments as r, mdl_context as co, mdl_course as cu, mdl_role as rl
WHERE
/*r.roleid = '5' AND*/
r.contextid = co.id AND
co.instanceid = cu.id AND
r.roleid=rl.id
GROUP BY
cu.fullname,rl.name

la consulta es probada, funciona en mysql