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

como seria esta consulta

Estas en el tema de como seria esta consulta en el foro de Mysql en Foros del Web. necesito listar de un menu todas las familias, pero primero tengo que mostrar las que mas familias tenga, me explico. id_menu | familia 15 | ...
  #1 (permalink)  
Antiguo 28/03/2012, 08:06
 
Fecha de Ingreso: febrero-2010
Mensajes: 157
Antigüedad: 9 años, 9 meses
Puntos: 5
como seria esta consulta

necesito listar de un menu todas las familias, pero primero tengo que mostrar las que mas familias tenga, me explico.

id_menu | familia
15 | familia menu a
15 | familia menu b
15 | familia menu c
15 | familia menu d
15 | familia menu e
15 | familia menu f
15 | familia menu g
15 | familia menu h
7 | familia menu a
7 | familia menu b
7 | familia menu c
7 | familia menu d
10 | familia menu d

como lo muestro asi????

Última edición por yeyowave; 28/03/2012 a las 09:50
  #2 (permalink)  
Antiguo 28/03/2012, 10:25
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 12 años, 11 meses
Puntos: 447
Respuesta: como seria esta consulta

Hola yeyowave:

Hay varias formas de ordenar los datos de la manera que quieres, una sería utilizando un JOIN, más o menos así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM menu;
  2. +---------+----------------+
  3. | id_menu | familia        |
  4. +---------+----------------+
  5. |      15 | familia menu a |
  6. |      15 | familia menu f |
  7. |      10 | familia menu d |
  8. |      15 | familia menu c |
  9. |      15 | familia menu g |
  10. |       7 | familia menu d |
  11. |      15 | familia menu h |
  12. |       7 | familia menu a |
  13. |      15 | familia menu b |
  14. |       7 | familia menu b |
  15. |      15 | familia menu d |
  16. |       7 | familia menu c |
  17. |      15 | familia menu e |
  18. +---------+----------------+
  19. 13 rows in set (0.00 sec)
  20.  
  21. mysql> SELECT M1.* FROM menu M1 INNER JOIN
  22.     -> (SELECT COUNT(id_menu) total, id_menu FROM menu GROUP BY id_menu) M2
  23.     -> ON M1.id_menu = M2.id_menu
  24.     -> ORDER BY m2.total DESC, m1.familia;
  25. +---------+----------------+
  26. | id_menu | familia        |
  27. +---------+----------------+
  28. |      15 | familia menu a |
  29. |      15 | familia menu b |
  30. |      15 | familia menu c |
  31. |      15 | familia menu d |
  32. |      15 | familia menu e |
  33. |      15 | familia menu f |
  34. |      15 | familia menu g |
  35. |      15 | familia menu h |
  36. |       7 | familia menu a |
  37. |       7 | familia menu b |
  38. |       7 | familia menu c |
  39. |       7 | familia menu d |
  40. |      10 | familia menu d |
  41. +---------+----------------+
  42. 13 rows in set (0.00 sec)

Saludos
Leo.
  #3 (permalink)  
Antiguo 28/03/2012, 11:44
 
Fecha de Ingreso: febrero-2010
Mensajes: 157
Antigüedad: 9 años, 9 meses
Puntos: 5
Respuesta: como seria esta consulta

Leo Gracias por tu respuesta

siento haber explicado mal....
tengo 2 tablas

Tabla menu
Código MySQL:
Ver original
  1. mysql> SELECT * FROM menu;
  2. +---------+----------------+
  3. | id_menu | nombre |
  4. +---------+----------------+
  5. |      1| nombre menu1 |
  6. |      2| nombre menu 2|
  7. |      3| nombre menu 3 |
  8. +---------+----------------+

Tabla Submenu
Código MySQL:
Ver original
  1. mysql> SELECT * FROM Submenu;
  2. +---------+---------+----------------+
  3. | id_submenu | id_menu| nombre |
  4. +---------+----------------+
  5. |      1|      1| sub menu a |
  6. |      2|      1| sub menu b|
  7. |      3|      1| sub menu c |
  8. |      4|      2| sub menu a |
  9. |      5|      2| sub menu b|
  10. |      6|      2| sub menu c |
  11. |      7|      2| sub menu d |
  12. |      8|      2| sub menu e |
  13. |      9|      2| sub menu f |
  14. |    10|      2| sub menu g |
  15. |    11|      3| sub menu a |
  16. |    12|      3| sub menu b |
  17. +---------+----------------+

lo que necesito obtener es igual que lo que me has puesto tu, pero con el id del menu principal y el texto del submenu.

estoy espeso y no logro sacar nada...
Gracias
  #4 (permalink)  
Antiguo 28/03/2012, 12:58
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 12 años, 11 meses
Puntos: 447
Respuesta: como seria esta consulta

¿Y cual es el problema?... A partir de la idea que te puse ¿hiciste el intento de obtener una consulta semejante que se adecuara a lo que necesitas? si es así imagino que falló (pues no das por cerrado el tema) ¿cuál fue el fallo? si marcó algún error ¿Cuál es ese error?, si es un error lógico (la consulta se ejecuta pero no se obtienen los resultados esperados) ¿Qué es lo que estás obteniendo?

Incluye algo de lo que haz intentado hacer (no importa si está todo mal). eso nos dá una idea de que al menos haz tratado de hacer la consulta y no simplemente estás esperando a que te den una consulta para copiar y pegar... Ojo con eso.

Saludos
Leo.
  #5 (permalink)  
Antiguo 28/03/2012, 14:37
 
Fecha de Ingreso: febrero-2010
Mensajes: 157
Antigüedad: 9 años, 9 meses
Puntos: 5
Respuesta: como seria esta consulta

hola, gracias por intentar aclarame, esto es lo que pongo

SELECT *
FROM int_menu_1 M1
INNER JOIN (

SELECT COUNT( id ) total, id_menu_1, id, nombre
FROM int_menu_2
GROUP BY id
)M2 ON M1.id = M2.id_menu_1
ORDER BY m2.total DESC , m1.nombre;
  #6 (permalink)  
Antiguo 28/03/2012, 15:04
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 12 años, 11 meses
Puntos: 447
Respuesta: como seria esta consulta

Insisto ¿CUAL ES EL PROBLEMA?. Correcto, ya pusiste la consulta que trataste de ejecutar, ¿TE MARCO UN ERROR? ¿EL RESULTADO NO ES EL ESPERADO?...

Además, en un post mencionas una estructura y nombres diferentes (menu y submenu) pero tu consulta la pones como (int_menu_1, int_menu_2), por lo tanto ni siquiera puedo ejecutar la consulta con los datos originales que pones.

Segundo, OBSERVA DETENIDAMENTE LA CONSULTA QUE PUSE:


Código:
SELECT M1.* FROM menu M1 INNER JOIN
(
SELECT COUNT(id_menu) total, id_menu FROM menu GROUP BY id_menu
) M2
ON M1.id_menu = M2.id_menu
ORDER BY m2.total DESC, m1.familia;
Observa que en el select marcado con rojo SÓLO ESTOY LISTANDO EL ID_MENU, no todos los campos de la tabla... la agrupación se debe hacer SÓLO SOBRE EL CAMPO id_menu o id_menu_1.id según la estructura que quieras tomar de ejemplo...

Código:
SELECT COUNT( id ) total, id_menu_1, id, nombre
FROM int_menu_2
GROUP BY id
Segundo, la tabla 1 (menu o id_menu_1 como prefieras) en realidad NO SIRVE PARA NADA, por lo tanto NO DEBES INCLUIRLA EN LA CONSULTA. Observa que en la consulta pongo en color morado la sección FROM, EN DONDE SE HACE REFERENCIA A LA MISMA TABLA.

Compañ[email protected], espero no sonar demasiado agresivo con mi comentario, pero en el futuro tómate más de 2 minutos para redactar mejor tus post's... entre más detalles puedas dar de tus tablas y tus consultas más fácil será tratar de ayudarte... recuerda que no somos adivinos, hay muchos detalles que tienes que aclarar.

Saludos
Leo.
  #7 (permalink)  
Antiguo 29/03/2012, 07:52
 
Fecha de Ingreso: febrero-2010
Mensajes: 157
Antigüedad: 9 años, 9 meses
Puntos: 5
Respuesta: como seria esta consulta

Grcias por tu respuesta, tienes razon, te explico desde 1 principio

Tablas las cambie el nombre

Tabla - int_menu_0
Campos Id, nombre

Tabla - int_menu_1
Campos id, id_menu_0, nombre

Tabla - int_menu_2
Campos id, id_menu_0, id_menu1, nombre

La tabla int_menu_0 no se utiliza en la consulta, lo pongo para que veas de donde viene el id_menu_0 en la tabla 2

Al ejecutar
SELECT M1.nombre as nombre_categoria, m2.* FROM int_menu_1 M1 INNER JOIN( SELECT COUNT(id_menu_1) total, id_menu_1 as id_catego, nombre, id FROM int_menu_2 where id_menu_0=4 GROUP BY id_menu_1 ) M2 ON M1.ID = M2.id_catego ORDER BY m2.total DESC, id desc

Código MySQL:
Ver original
  1. +----------------------------+-------+-----------+-------------------------------------+----+
  2. | nombre_categoria           | total | id_catego | nombre                              | id |
  3. +----------------------------+-------+-----------+-------------------------------------+----+
  4. | categoria 1                |     6 |         8 | familia cat 1                       | 12 |
  5. | categoria 2                |     3 |        12 | familia cat 2                       | 26 |
  6. | categoria 3                |     3 |        10 | familia cat 3                       | 20 |
  7. | categoria 4                |     2 |        11 | familia cat 4                       | 24 |
  8. | categoria 5                |     2 |         9 | familia cat 5                       | 18 |
  9. +----------------------------+-------+-----------+-------------------------------------+----+

y lo que busco que saque es esto:

Código SQL:
Ver original
  1. +----------------------------+-------+-----------+-------------------------------------+----+
  2. | nombre_categoria           | total | id_catego | nombre                              | id |
  3. +----------------------------+-------+-----------+-------------------------------------+----+
  4. | categoria 1                |     6 |         8 | familia cat 1 a                     | id |
  5. | categoria 1                |     6 |         8 | familia cat 1 b                     | id |
  6. | categoria 1                |     6 |         8 | familia cat 1 c                     | id |
  7. | categoria 1                |     6 |         8 | familia cat 1 d                     | id |
  8. | categoria 1                |     6 |         8 | familia cat 1 e                     | id |
  9. | categoria 1                |     6 |         8 | familia cat 1 f                     | id |
  10. | categoria 2                |     3 |        12 | familia cat 2 a                     | id |
  11. | categoria 2                |     3 |        12 | familia cat 2 b                     | id |
  12. | categoria 2                |     3 |        12 | familia cat 2 c                     | id |
  13. | categoria 5                |     2 |         9 | familia cat 5 a                     | id |
  14. | categoria 5                |     2 |         9 | familia cat 5 b                     | id |
  15. +----------------------------+-------+-----------+-------------------------------------+----+

Etiquetas: seria
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 02:00.