Foros del Web » Programando para Internet » PHP »

Mostrar ultimas versiones de una consulta.

Estas en el tema de Mostrar ultimas versiones de una consulta. en el foro de PHP en Foros del Web. Hola, buenas tardes. Tengo una duda, en una consulta de MYSQL obtengo una lista de eventos Código: SELECT DISTINCT e.nid_evento, e.sclave, e.snombre_evento, e.dfecha_inicio, e.dfecha_fin, e.nasistentes, ...
  #1 (permalink)  
Antiguo 12/07/2012, 16:54
 
Fecha de Ingreso: junio-2011
Mensajes: 6
Antigüedad: 13 años, 4 meses
Puntos: 0
Pregunta Mostrar ultimas versiones de una consulta.

Hola, buenas tardes.

Tengo una duda, en una consulta de MYSQL obtengo una lista de eventos
Código:
SELECT  DISTINCT
                        e.nid_evento,
                        e.sclave,
                        e.snombre_evento,
                        e.dfecha_inicio,
                        e.dfecha_fin,
                        e.nasistentes,
                        c.srazon_social,
                        te.stipo_eventos,
                        e.nstatus,
                        u.susuario,
                        e.nversion
                        FROM eventos e
                        INNER JOIN clientes c ON( e.nid_cliente = c.nid_cliente )
                        LEFT JOIN tipo_eventos te ON(te.nid_tipo_evento = e.nid_tipo_evento)
                        LEFT JOIN usuarios_eventos ue ON(e.nid_evento = ue.nid_evento)
                        LEFT JOIN usuarios u ON(
                        ue.nid_usuario = u.nid_usuario
                        )
                        WHERE e.nstatus = 2
Pero al momento de mostrar los resultados de esta consulta, me percate que me devuelve todas las versiones de ese evento:
Código PHP:
for ($i 0$nData $i; ++$i) {
                
$sTableHtml .= '<tr class="gradeA odd">
                                    <td>'
.$aData[$i]['snombre_evento'].'</td>
                                    <td>'
.$aData[$i]['dfecha_inicio'].'</td>
                                    <td>'
.$aData[$i]['dfecha_fin'].'</td>
                                    <td>'
.$aData[$i]['srazon_social'].'</td>
                                    <td>'
.$aData[$i]['stipo_eventos'].'</td>
                                    <td>'
.$aData[$i]['nversion'].'</td>
                                    <td><a id="buttonImprimirMemo" class="button-link right" nevento="'
.$aData[$i]['nid_evento'].'" sclave="'.$aData[$i]['sclave'].'"><strong>Imprimir</strong></a></td>
                                </tr>'
;
            } 
Mi duda es, como puedo solo mostrar la ultima versión de ese evento, por ejemplo, el evento perenganito tiene 8 versiones, solo que me muestre en la tabla la version 8 del evento perenganito.

De antemano, muchas gracias
  #2 (permalink)  
Antiguo 12/07/2012, 17:20
Avatar de topo_bionico  
Fecha de Ingreso: junio-2012
Mensajes: 89
Antigüedad: 12 años, 4 meses
Puntos: 20
Respuesta: Mostrar ultimas versiones de una consulta.

No entiendo bien el problema, pero me parece porque todas muestran el mismo indice $i

Sino, tenes que traer de la base solamente el dato que igualas con "SELECT max(campo) FROM tabla"

Última edición por topo_bionico; 12/07/2012 a las 17:25
  #3 (permalink)  
Antiguo 12/07/2012, 17:58
 
Fecha de Ingreso: junio-2011
Mensajes: 6
Antigüedad: 13 años, 4 meses
Puntos: 0
Pregunta Respuesta: Mostrar ultimas versiones de una consulta.

Hola, gracias por responder, como comentas lo ultimo, he estado intentando con
Código:
SELECT max(campo)
.

Pero no me devuelve todos los eventos con su ultima version, he intentado algo asi:
Código:
SELECT MAX(e.nversion),
                        e.nid_evento,
                        e.sclave,
                        e.snombre_evento,
                        e.dfecha_inicio,
                        e.dfecha_fin,
                        e.nasistentes,
                        c.srazon_social,
                        te.stipo_eventos,
                        e.nstatus,
                        u.susuario,
e.nversion
                        FROM eventos e
                        INNER JOIN clientes c ON( e.nid_cliente = c.nid_cliente )
                        LEFT JOIN tipo_eventos te ON(te.nid_tipo_evento = e.nid_tipo_evento)
                        LEFT JOIN usuarios_eventos ue ON(e.nid_evento = ue.nid_evento)
                        LEFT JOIN usuarios u ON(
                        ue.nid_usuario = u.nid_usuario
                        )
                        WHERE e.nstatus = 2
.

Pero solo me devuelve un resultado, no todos los eventos con la ultima version.

Como se podria solucionar? Gracias.
  #4 (permalink)  
Antiguo 13/07/2012, 06:10
Avatar de topo_bionico  
Fecha de Ingreso: junio-2012
Mensajes: 89
Antigüedad: 12 años, 4 meses
Puntos: 20
Respuesta: Mostrar ultimas versiones de una consulta.

Si, pero tenes que hacer un consulta anidada y ahí hacer la comparación

Código SQL:
Ver original
  1. WHERE e.nstatus = 2 AND (e.nversion=(SELECT MAX(e.nversion)))

Todo el código seria así: (No puse el DISTINCT)
Código SQL:
Ver original
  1. SELECT e.nid_evento,
  2.         e.sclave,
  3.         e.snombre_evento,
  4.         e.dfecha_inicio,
  5.         e.dfecha_fin,
  6.         e.nasistentes,
  7.         c.srazon_social,
  8.         te.stipo_eventos,
  9.         e.nstatus,
  10.         u.susuario,
  11.         e.nversion
  12. FROM eventos e
  13.     INNER JOIN clientes c ON(e.nid_cliente = c.nid_cliente)
  14.     LEFT JOIN tipo_eventos te ON(te.nid_tipo_evento = e.nid_tipo_evento)
  15.     LEFT JOIN usuarios_eventos ue ON(e.nid_evento = ue.nid_evento)
  16.     LEFT JOIN usuarios u ON(ue.nid_usuario = u.nid_usuario)
  17. WHERE e.nstatus = 2 AND (e.nversion=(SELECT MAX(e.nversion)))

Si usas el DISTINCT la consulta te trae los valores únicos de los campos declarados y por eso capaz no obtenias todos los registros

Última edición por topo_bionico; 13/07/2012 a las 06:19
  #5 (permalink)  
Antiguo 13/07/2012, 08:44
 
Fecha de Ingreso: junio-2011
Mensajes: 6
Antigüedad: 13 años, 4 meses
Puntos: 0
Pregunta Respuesta: Mostrar ultimas versiones de una consulta.

Cita:
Iniciado por topo_bionico Ver Mensaje
Si, pero tenes que hacer un consulta anidada y ahí hacer la comparación

Código SQL:
Ver original
  1. WHERE e.nstatus = 2 AND (e.nversion=(SELECT MAX(e.nversion)))

Todo el código seria así: (No puse el DISTINCT)
Código SQL:
Ver original
  1. SELECT e.nid_evento,
  2.         e.sclave,
  3.         e.snombre_evento,
  4.         e.dfecha_inicio,
  5.         e.dfecha_fin,
  6.         e.nasistentes,
  7.         c.srazon_social,
  8.         te.stipo_eventos,
  9.         e.nstatus,
  10.         u.susuario,
  11.         e.nversion
  12. FROM eventos e
  13.     INNER JOIN clientes c ON(e.nid_cliente = c.nid_cliente)
  14.     LEFT JOIN tipo_eventos te ON(te.nid_tipo_evento = e.nid_tipo_evento)
  15.     LEFT JOIN usuarios_eventos ue ON(e.nid_evento = ue.nid_evento)
  16.     LEFT JOIN usuarios u ON(ue.nid_usuario = u.nid_usuario)
  17. WHERE e.nstatus = 2 AND (e.nversion=(SELECT MAX(e.nversion)))

Si usas el DISTINCT la consulta te trae los valores únicos de los campos declarados y por eso capaz no obtenias todos los registros
Cheque lo que me comentaste, con la consulta anidada, pero me da estos resultados:
Código:
nid_evento,sclave,snombre_evento,dfecha_inicio,dfecha_fin,nasistentes,srazon_social,stipo_eventos,nstatus,susuario,nversion
4,201215,Expo Belleza,16/5/2012,20/6/2012,0,PRODUCTOS MARTINEZ,Convencion,2,,1
6,
201215,CANACINTRA,20/4/2012,26/4/2012,33,ELECTRICA JAMA,Exposicion,2,,1
10,201221,CFE,19/4/2012,27/4/2012,100,CFE,Exposicion,2,,1
13,201219,Sedesol,16/4/2012,26/4/2012,,SEDESOL,Congreso,2,,1
15,20122,TAJIN,16/4/2012,20/4/2012,,ENTORNO INDUSTRIAL, S.A. DE C.V.,Convencion,2,,1
16,20123,Visita EPN,16/4/2012,20/4/2012,,DRENOVAC,Convencion,2,,1
17,20124,BocaFest,16/4/2012,20/4/2012,,GRUPO AGENTE DE SEGUROS Y DE FIANZAS ,Convencion,2,,2
18,20125,Tlacotalpan,0/0/0000,27/4/2012,,CORPORATIVO TRILOMEX ,Convencion,2,,2
19,20126,IEEE,24/4/2012,27/4/2012,,MANUFACTURAS MESSA,Convencion,2,rjacome,1
19,20126,IEEE,24/4/2012,27/4/2012,,MANUFACTURAS MESSA,Convencion,2,rjacome,1
19,20126,IEEE,24/4/2012,27/4/2012,,MANUFACTURAS MESSA,Convencion,2,rjacome,1
19,20126,IEEE,24/4/2012,27/4/2012,,MANUFACTURAS MESSA,Convencion,2,rjacome,1
19,20126,IEEE,24/4/2012,27/4/2012,,MANUFACTURAS MESSA,Convencion,2,rjacome,1
19,20126,IEEE,24/4/2012,27/4/2012,,MANUFACTURAS MESSA,Convencion,2,rjacome,1
27,201213,Olimpiada 2012,7/5/2012,16/5/2012,,MEXOTIC S.P.R. DE R.L.,Convencion,2,,1
30,201216,Expo Educacion,7/5/2012,25/5/2012,,RAMSA,Exposicion,2,,1
31,201218,Feria Educativa,18/5/2012,18/5/2012,,BIO-RAD, S.A.,Convencion,2,,2
32,201218,Concurso Odontologia,18/5/2012,25/5/2012,,DESEOS EN COMPUTO, AUDIO Y VIDEO, S.A. DE C.V,Exposicion,2,,1
39,201220,Auto Chevrolet 2012,7/6/2012,11/6/2012,,Gruver,Exposicion,2,,1
40,201220,13va. asamblea Nacional de la Asociacion de Agentes Aduanales,17/6/2012,21/6/2012,,CAAAREM,Convencion,2,,1
41,201220,Canacintra 2013,6/6/2012,14/6/2012,,Canacintra,Convencion,2,,1
44,201221,rodrigo,12/6/2012,22/6/2012,,prueba,Convencion,2,,1
55,201218,Carnaval 2012,1/6/2012,1/6/2012,,ALIMENTOS EFA SA DE CV,Incentivo,2,,2
57,201223,Expo Tajines,12/6/2012,12/6/2012,,Ingenieros SA,Exposicion,2,,4
58,201224,Test,15/6/2012,15/6/2012,,teranet,Convencion,2,,1
61,201225,Xalapa llenate de Magia,21/6/2012,29/6/2012,,h. Ayuntamiento de Xalapa,Exposicion,2,,2
62,,asasdas,1/6/2012,30/6/2012,,SALAS TANGERINA, S.A. DE C.V.,Convencion,2,,0
66,201128,ajdjd,25/6/2012,25/6/2012,,lkj,Convencion,2,,1
69,201228,Foro Pyme Xalapa ,28/6/2012,30/6/2012,,kljsd,Exposicion,2,,3
70,201231,Expo Soriana,1/6/2012,29/6/2012,,Soriana Mexico,Exposicion,2,,1
71,201229,La mar,2/7/2012,20/7/2012,,Particular,Social,2,,1
72,201227,prueba,17/7/2012,31/7/2012,,uno,Convencion,2,,1
73,201227,prueba2,9/7/2012,31/7/2012,,xyz,Convencion,2,,1
74,201227,20 aniversario Office Max,3/7/2012,26/7/2012,,Office Max,Convencion,2,,1
78,201230,55 Aniversario Tecnologico de Orizaba,24/7/2012,31/7/2012,,Tecnologico de Orizaba,Social,2,,1
79,201233,Traslados Xalapa-Veracruz,10/7/2012,10/7/2012,0,DISTRIBUIDORA HARA-TEK ,Exposicion,2,,1
83,201235,Julio Regalado,2/7/2012,26/7/2012,,Soriana Mexico,Exposicion,2,,0
86,2012000003,Prueba Calve,12/7/2012,14/7/2012,,Prueba Calve,Convencion,2,,1
87,2012000004,Expo Electronicos Samsung,2/7/2012,31/7/2012,,Samsung,Exposicion,2,,1
102,2012000019,Expo Orizaba,2/7/2012,31/7/2012,,Diez,Exposicion,2,,1
108,2012000004,Expo Electronicos Samsung,2/7/2012,31/7/2012,,Samsung,Exposicion,2,,2
109,2012000004,Expo Electronicos Samsung,2/7/2012,31/7/2012,,Samsung,Exposicion,2,,3
110,2012000004,Expo Electronicos Samsung,2/7/2012,31/7/2012,,Samsung,Exposicion,2,,3
111,2012000004,Expo Electronicos Samsung,2/7/2012,31/7/2012,,Samsung,Exposicion,2,,4
112,2012000004,Expo Electronicos Samsung,2/7/2012,31/7/2012,,Samsung,Exposicion,2,,5
113,2012000004,Expo Electronicos Samsung,2/7/2012,31/7/2012,,Samsung,Exposicion,2,,6
115,2012000003,Prueba Calve,12/7/2012,14/7/2012,,Prueba Calve,Convencion,2,,3
Por ejemplo, el evento "Expo Electronicos Samsung", y otros mas, me devuelve todos sus valores, pero deberia de mostrarme solo en la consulta la ultima version. que este caso es el 6.

Alguna idea?
  #6 (permalink)  
Antiguo 13/07/2012, 10:06
Avatar de topo_bionico  
Fecha de Ingreso: junio-2012
Mensajes: 89
Antigüedad: 12 años, 4 meses
Puntos: 20
Respuesta: Mostrar ultimas versiones de una consulta.

Si te trae todos es que el campo nversion esta en más de una tabla y falta igualar la consulta para que no te traiga el producto cartesiano o están mal hechos los join

Etiquetas: evento, mysql, versiones, ultimo
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 17:42.