Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Consulta a 3 bases de datos con php mysql

Estas en el tema de Consulta a 3 bases de datos con php mysql en el foro de Mysql en Foros del Web. Hola chicos, Estoy haciendo un top de aportes en mi sitio, lo cual estoy contando cuantas veces se repite un nick para saber cuantos aportes ...
  #1 (permalink)  
Antiguo 10/01/2012, 12:58
Avatar de MDJProdMusic  
Fecha de Ingreso: abril-2011
Ubicación: Antofagasta, Chile
Mensajes: 36
Antigüedad: 13 años
Puntos: 0
Consulta a 3 bases de datos con php mysql

Hola chicos,

Estoy haciendo un top de aportes en mi sitio, lo cual estoy contando cuantas veces se repite un nick para saber cuantos aportes ha hecho ese usuario pero sucede que los aportes se separan en 3 bases de datos:

User_Audio
User_Video
User_Otros

Lo cual estas 3 bases de datos tienen una tabla en comun, llamada "nick" (sin comillas)

Entonces lo que quiero hacer es mezclar las 3 en una consulta para contar los que mas aportan, tengo lo siguiente y ojalas se pueda hacer algo...

Código PHP:
<?php
include('conexion.php') ;
$sql "SELECT nick, COUNT(nick) AS cantidad FROM user_audio GROUP BY nick ORDER BY cantidad DESC LIMIT 10";
$result mysql_query($sql) or die(mysql_error());

while(
$row mysql_fetch_array($result)) {

echo 
$row[nick];
echo 
$row[cantidad];

}
?>
Esto me entrega el top 10 de la base datos user_audio, pero necesito mezclarlo con user_video y user_otros, para hacer un top global, como dije anteriormente necesito mezclar la tabla en comun que tienen que es "nick" (sin comillas).

Estube probando una sentencia llamada INNER JOIN pero no me sirvio ya que necesito asimilar las ID, ya que esta busca relaciones entre las 2 o 3 bases, en mi caso solo necesito contar los nombres.


Agradeceria mucho su ayuda.

Saludos!
__________________
http://www.chiledj.cl
  #2 (permalink)  
Antiguo 10/01/2012, 13:57
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta a 3 bases de datos con php mysql

Hola MDJProdMusic:

Vamos aclarando algunos puntos, creo que estás confundiendo los conceptos de Base de Datos y Tablas. Dices que tienes TRES BASES DE DATOS diferentes con una TABLA en común, pero según la consulta que pones creo que lo que tienes son TRES TABLAS dentro de una misma base de datos y en las tres tablas hay aparece el mismo campo nick...

Si es así, puedes hacer uso de la cláusula UNION ALL para unir tus tablas antes de hacer el conteo. Checa este script:

Código MySQL:
Ver original
  1. mysql> SELECT nick, COUNT(nick) AS cantidad
  2.     -> FROM User_Audio GROUP BY nick ORDER BY cantidad DESC;
  3. +------+----------+
  4. | nick | cantidad |
  5. +------+----------+
  6. | hugo |        2 |
  7. | paco |        1 |
  8. | luis |        1 |
  9. +------+----------+
  10. 3 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT nick, COUNT(nick) AS cantidad
  13.     -> FROM User_Video GROUP BY nick ORDER BY cantidad DESC;
  14. +------+----------+
  15. | nick | cantidad |
  16. +------+----------+
  17. | paco |        3 |
  18. | hugo |        1 |
  19. +------+----------+
  20. 2 rows in set (0.00 sec)
  21.  
  22. mysql> SELECT nick, COUNT(nick) AS cantidad
  23.     -> FROM User_Otros GROUP BY nick ORDER BY cantidad DESC;
  24. +------+----------+
  25. | nick | cantidad |
  26. +------+----------+
  27. | hugo |        3 |
  28. | paco |        1 |
  29. +------+----------+
  30. 2 rows in set (0.00 sec)
  31.  
  32. mysql> SELECT nick, COUNT(nick) AS cantidad FROM (
  33.     -> SELECT nick FROM User_Audio
  34.     -> UNION ALL
  35.     -> SELECT nick FROM User_Video
  36.     -> UNION ALL
  37.     -> SELECT nick FROM User_Otros
  38.     -> ) T GROUP BY nick ORDER BY cantidad DESC;
  39. +------+----------+
  40. | nick | cantidad |
  41. +------+----------+
  42. | hugo |        6 |
  43. | paco |        5 |
  44. | luis |        1 |
  45. +------+----------+
  46. 3 rows in set (0.00 sec)

Saludos
Leo.
  #3 (permalink)  
Antiguo 10/01/2012, 14:12
Avatar de MDJProdMusic  
Fecha de Ingreso: abril-2011
Ubicación: Antofagasta, Chile
Mensajes: 36
Antigüedad: 13 años
Puntos: 0
Respuesta: Consulta a 3 bases de datos con php mysql

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola MDJProdMusic:

Vamos aclarando algunos puntos, creo que estás confundiendo los conceptos de Base de Datos y Tablas. Dices que tienes TRES BASES DE DATOS diferentes con una TABLA en común, pero según la consulta que pones creo que lo que tienes son TRES TABLAS dentro de una misma base de datos y en las tres tablas hay aparece el mismo campo nick...

Si es así, puedes hacer uso de la cláusula UNION ALL para unir tus tablas antes de hacer el conteo. Checa este script:

Código MySQL:
Ver original
  1. mysql> SELECT nick, COUNT(nick) AS cantidad
  2.     -> FROM User_Audio GROUP BY nick ORDER BY cantidad DESC;
  3. +------+----------+
  4. | nick | cantidad |
  5. +------+----------+
  6. | hugo |        2 |
  7. | paco |        1 |
  8. | luis |        1 |
  9. +------+----------+
  10. 3 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT nick, COUNT(nick) AS cantidad
  13.     -> FROM User_Video GROUP BY nick ORDER BY cantidad DESC;
  14. +------+----------+
  15. | nick | cantidad |
  16. +------+----------+
  17. | paco |        3 |
  18. | hugo |        1 |
  19. +------+----------+
  20. 2 rows in set (0.00 sec)
  21.  
  22. mysql> SELECT nick, COUNT(nick) AS cantidad
  23.     -> FROM User_Otros GROUP BY nick ORDER BY cantidad DESC;
  24. +------+----------+
  25. | nick | cantidad |
  26. +------+----------+
  27. | hugo |        3 |
  28. | paco |        1 |
  29. +------+----------+
  30. 2 rows in set (0.00 sec)
  31.  
  32. mysql> SELECT nick, COUNT(nick) AS cantidad FROM (
  33.     -> SELECT nick FROM User_Audio
  34.     -> UNION ALL
  35.     -> SELECT nick FROM User_Video
  36.     -> UNION ALL
  37.     -> SELECT nick FROM User_Otros
  38.     -> ) T GROUP BY nick ORDER BY cantidad DESC;
  39. +------+----------+
  40. | nick | cantidad |
  41. +------+----------+
  42. | hugo |        6 |
  43. | paco |        5 |
  44. | luis |        1 |
  45. +------+----------+
  46. 3 rows in set (0.00 sec)

Saludos
Leo.

Disculpa me exprese mal, si tienes razon, tengo 3 tablas en 1 base de datos con un campo en comun, ahora si..

Mira estoy viendo lo que me has dado, ¿debo insertar todo junto, o solo el campo final donde se hacen las uniones?


Por sierto, gracias por tu ayuda compañero :)
__________________
http://www.chiledj.cl
  #4 (permalink)  
Antiguo 10/01/2012, 16:20
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta a 3 bases de datos con php mysql

Hola de nuevo MDJProdMusic:

No me quedó claro a que te refieres cuando dices:

Cita:
¿debo insertar todo junto, o solo el campo final donde se hacen las uniones?
Supongo que te refieres al hecho de que sólo estoy seleccionando el campo nick de las tablas:

Código:
SELECT nick FROM
Para lo que necesitas hacer, esto es lo único que requieres, independientemente de cual sea la estructura de tus tablas.

Hay que recordar que para poder hacer una UNION, cada subconsulta debe regresar el mismo numero de columnas y éstas deberán ser del mismo tipo, por lo que si necesitas insertar algún otro campo para filtrar o hacer alguna otra validación, deberán aparecer en las tres subconsultas.

No sé si esto es lo que preguntabas, cualquier otra cosa lo comentas en el foro.

Saludos
Leo.
  #5 (permalink)  
Antiguo 10/01/2012, 16:51
Avatar de MDJProdMusic  
Fecha de Ingreso: abril-2011
Ubicación: Antofagasta, Chile
Mensajes: 36
Antigüedad: 13 años
Puntos: 0
Respuesta: Consulta a 3 bases de datos con php mysql

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola de nuevo MDJProdMusic:

No me quedó claro a que te refieres cuando dices:



Supongo que te refieres al hecho de que sólo estoy seleccionando el campo nick de las tablas:

Código:
SELECT nick FROM
Para lo que necesitas hacer, esto es lo único que requieres, independientemente de cual sea la estructura de tus tablas.

Hay que recordar que para poder hacer una UNION, cada subconsulta debe regresar el mismo numero de columnas y éstas deberán ser del mismo tipo, por lo que si necesitas insertar algún otro campo para filtrar o hacer alguna otra validación, deberán aparecer en las tres subconsultas.

No sé si esto es lo que preguntabas, cualquier otra cosa lo comentas en el foro.

Saludos
Leo.

Tengo varios usuarios en el cual aportan a varias secciones, los cuales estas secciones tienen su propia tabla con campos en ella, puesto que el campo "nick" es el unico campo que tienen en comun estas 3 tablas, y pues si me sirve asi ya que solo necesito contar las veces que se repite cada nick de usuario en las tablas, es decir:

En tabla Audio (campo "nick"), Jose se repite 3 veces
En tabla Video (campo "nick"), Jose se repite 5 veces
En tabla Otros (campo "nick"), Jose se repite 2 veces,

entonces al hacer el top de usuarios me dira.

Jose (10), obviamente hay muchos usuarios, este top tiene un limite de 10, como lo puse en el codigo que mostre, ese es el codigo que estoy usando pero solo me da de la tabla Audio


Código PHP:
<?php
include('conexion.php') ;
$sql "SELECT nick, COUNT(nick) AS cantidad FROM user_audio GROUP BY nick ORDER BY cantidad DESC LIMIT 10";
$result mysql_query($sql) or die(mysql_error());

while(
$row mysql_fetch_array($result)) {

echo 
$row[nick];
echo 
$row[cantidad];

}
?>
Estube intentando hacerlo asi pero me dio un error de ambiguedad:

Código PHP:
SELECT nickCOUNT(nick) AS cantidad FROM user_audio,user_video,user_otros GROUP BY nick ORDER BY cantidad DESC LIMIT 10 
Nose porque habra dado ese error si los 3 tienen el mismo campo llamado "nick"
__________________
http://www.chiledj.cl
  #6 (permalink)  
Antiguo 11/01/2012, 09:24
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta a 3 bases de datos con php mysql

Y qué problema hay con la consulta que te puse???

Código MySQL:
Ver original
  1. mysql> SELECT nick, COUNT(nick) AS cantidad FROM (
  2.     -> SELECT nick FROM User_Audio
  3.     -> UNION ALL
  4.     -> SELECT nick FROM User_Video
  5.     -> UNION ALL
  6.     -> SELECT nick FROM User_Otros
  7.     -> ) T GROUP BY nick ORDER BY cantidad DESC;

La probaste??? según yo esta consulta debería funcionar, pero tú tienes la última palabra.

Saludos
Leo.

Etiquetas: bases, join, php, query, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:29.