Necesito sacar un listado de los usuarios que son socios en la web, he tratado de hacer una consulta desde Cpanel con PHPmySQL pero no lo logro.
He visto que la información está en tres tablas _users, _usergroups y _usergroup_map. He hecho un INNER JOIN de las tablas pero no he conseguido el resultado, de momento las he exportado a .csv y trataré de hacerlo en Excel.
No tengo experiencia en SQL. ¿Cual sería la sentancia sql corercta? Necesito nombre de usuario, email y grupo donde este puede ser registered o registered y socios.
Saludos.
Luis Ignacio
Contenido solo visible a usuarios registrados
Hola,
Primero necesitamos que nos compartas la base de datos de la que nos hablas, necesitamos las tablas de tu base de datos y algunos (no todos) registros de la misma para realizar pruebas, si exportaste tu base de datos a csv puedes compartirnos ese mismo archivo pero elimina los registros, solo deja unos 10 o 15 registros (estos pueden ser falsos, solo es para pruebas). El archivo puedes subirlo via Google Drive o algún otro servicio de terceros.
Adicionalmente, los usuarios que deseas extraer ¿Deben pertenecer al grupo registered o socios o deben pertenecer a ambos? ¿Podrías ser un poco mas claro a qué grupos deben pertenecer los usuarios? Por favor.
Saludos
¡Hola! He encontrado las tablas y los campos que necesito de la base de datos, las tablas son las de la base de datos joomla 2.5
_users
Los campos que necesito son ID name username email
_user_usergroup_map
Tiene los campos user_id group_id el valor del user_id es el que tiene la tabla _users en ID
_usergroups
Tiene los campos id y title el valor de id es el que la tabla anterior tiene en group_id
El resultado que quiero obtener del query debía de ser las columnas:
user username email title
de esta forma puedo saber cada user a que grupo pertenece, un user puede estar en varios grupos, luego con un filtro de Excel puedo buscar por ejemplo los user que son socios.
Actualmente lo he conseguido en Excel con las exportaciones a csv de _users y _user_usergroup_map usando la función buscarv pero quería dejarlo hecho con un query en SQL.
He tratado de hacer
select name, username, email FROM xxx_users
INNER JOIN xxx_user_usergroup_map ON xxx_users.id=xxx_user_usergroup_map.user_id
INNER JOIN xxx_usergroups ON xxx_usergroups.id=xxx_user_usergroup_map.user_id
Pero me da : MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas). (La consulta tardó 0.0004 segundos.) , se que algo no estoy haciendo bien pero no lo veo
tabla _users
ID name username email otra infroamcion como password fechas .......
23 juan jonh juan@hotmail.com
25 luis LUIS 123@gmail.com
33 Antonio toni toni@gmail.com
Tabla _user_Usergroup_map
user_id group_id
23 10
25 10
25 11
33 10
Tabla _usergroups
id title
10 registrado
11 socio
12 editor
Resultado buscado para exportar a .csv :
juan jonh juan@hotmail.com registrado
luis LUIS 123@gmail.com registrado
luis LUIS 123@gmail.com socio
Antonio toni toni@gmail.com registrado
Saludos.
Luis Ignacio
¡Hola!, me respondo ya que creo que he encontrado una solución:
select xxx_users.name, xxx_users.username, xxx_users.email,
xxx_usergroups.title
from xxx_users inner join xxx_user_usergroup_map
on xxx_users.id = xxx_user_usergroup_map.user_id
INNER JOIN xxx_usergroups
on xxx_user_usergroup_map.group_id = xxx_usergroups.id
Con este query he conseguido el resultado que quería.
Gracias.
Saludos.
Luis Ignacio
Hola Luis,
Prueba con la siguiente consulta SQL:
SELECT _users.name, _users.username, _users.email, _usergroups.title
FROM _users, _usergroups, _user_Usergroup_map
WHERE _user_Usergroup_map.user_id = _users.id
AND _user_Usergroup_map.group_id = _usergroups.id
AND ( _user_Usergroup_map.group_id = 10
OR _user_Usergroup_map.group_id = 11);
Saludos 🙂
¡Muchas gracias! Esta query también me vale, así sale separado por un lado saca los registrados y a continuación los socios.
Desconocía que en el Where se pudiera hacer AND y OR. ):
Por mi parte está cerrado el post ya que ha sido solucionado.
Saludos.
Luis Ignacio
Hola Luis,
Excelente, muchas gracias por compartirnos tu solución y me alegra que la nuestra también te fuera de utilidad aunque debo reconocer que la forma indicada de hacerla es mediante el uso de JOINS, tal como lo has realizado tú, la manera en que formulé la consulta SQL fue la manera clásica o sencilla. Por otra parte, claro puedes usar y anidar operadores lógicos como el AND y OR tantas veces como desees en la cláusula WHERE, incluso puedes definir prioridades utilizando los paréntesis (), tal como lo implementé.
Nos alegra que nuestr@s client@s estén felices con nuestro trabajo.
¿Te importaría dedicarle un minuto a dejarnos una reseña / opinión en Facebook o Google? En la que te vaya mejor.
Facebook: https://www.webempresa.com/testimonio-facebook
Google: https://www.webempresa.com/testimonio-google
Nos ayudaría a que otr@s usuarios se decidan por nosotr@s si saben lo que nos dices.
Gracias de parte de todo el equipo del foro. Gracias por consultarnos, por tu preferencia y confianza en Webempresa.
Saludos 🙂