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

Consulta complicada

Estas en el tema de Consulta complicada en el foro de Mysql en Foros del Web. Hola Gente a ver si me pueden ayudar con la siguiente consulta: Tengo una tabla de periodistas columnistas en la cual diariamente cada uno de ...
  #1 (permalink)  
Antiguo 11/02/2010, 05:49
 
Fecha de Ingreso: julio-2009
Ubicación: Montevideo, UY
Mensajes: 128
Antigüedad: 10 años, 4 meses
Puntos: 1
Pregunta Consulta complicada

Hola Gente a ver si me pueden ayudar con la siguiente consulta:
Tengo una tabla de periodistas columnistas en la cual diariamente cada uno de ellos publica un nuevo articulo el cual se guarda en esta tabla.
Necesito hacer una consulta que me devuelva solamente el ultimo articulo que publico cada periodista (puede pasar que el ultimo articulo no sea la misma fecha para todos, en el caso que alguno no haya hecho el articulo todavia).
Como podría ser la columna?
La tabla es la siguiente:
columnas (id_columna, id_periodista, fecha_columna, titulo_columna, columna).
Muchas gracias por su ayuda!!!
  #2 (permalink)  
Antiguo 11/02/2010, 08:33
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 10 años, 9 meses
Puntos: 360
Respuesta: Consulta complicada

Prueba esto

Código MySQL:
Ver original
  1. select p.* from periodista p
  2. (select id_periodista,
  3. max(fecha_columna) as fecha_mayor
  4. from periodistas
  5. group by id_periodista)t1
  6. on p.id_periodista=t1.id_periodista;

No lo he probado

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 19/02/2010, 13:19
 
Fecha de Ingreso: julio-2009
Ubicación: Montevideo, UY
Mensajes: 128
Antigüedad: 10 años, 4 meses
Puntos: 1
Respuesta: Consulta complicada

No quiere funcionar.
Le agregué algunos AS que me pareció que faltaban en la consulta pero no anda...
  #4 (permalink)  
Antiguo 19/02/2010, 13:30
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 10 años, 9 meses
Puntos: 360
Respuesta: Consulta complicada

Saca error?
o da resultados que no son?
como se comporta la consulta?

Puedes dar un poco mas de detalles para ver que puede estar pasando.

saludos pancho
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 19/02/2010, 21:01
 
Fecha de Ingreso: julio-2009
Ubicación: Montevideo, UY
Mensajes: 128
Antigüedad: 10 años, 4 meses
Puntos: 1
Respuesta: Consulta complicada

Bueno luego de probar y probar y probar llegué a algo
Hice la sig consulta:

Código:
$tabla = mysql_query("SELECT usuarios.*, columnas.*, MAX(columnas.id)
FROM usuarios, columnas 
WHERE usuarios.id = columnas.id_columnista
GROUP BY id_columnista " );
En donde las tablas son las siguientes:
USUARIOS(id, nombre, apellido, ...., foto)
COLUMNAS(id, id_columnista, fecha, titulo, resumen, columna)


En donde se da que: usuarios.id = columnas.id_columnista

Con esto logro mostrar la un registro de cada columnista y a su vez su foto (que esta en USUARIOS)

Ahora el problema es que no se por que pero a pesar de usar la funcion MAX (columnas.id), me muestra el menor id, siempre y para cada columnista.
columnas.id es autonumerico

Aunque haga una consulta tan simple como:
Código:
SELECT *, max(id)														
FROM columnas 															 GROUP BY id_columnista
Igual me da siempre el menor id.
Tienen idea de cual puede ser el error?

Muchas gracias por tu atención y por tu ayuda !!!

Última edición por Pancho_Khan; 20/02/2010 a las 00:02
  #6 (permalink)  
Antiguo 20/02/2010, 07:22
 
Fecha de Ingreso: abril-2008
Ubicación: MDQ
Mensajes: 54
Antigüedad: 11 años, 8 meses
Puntos: 2
Respuesta: Consulta complicada

Cita:
Iniciado por Pancho_Khan Ver Mensaje
Hola Gente a ver si me pueden ayudar con la siguiente consulta:
Tengo una tabla de periodistas columnistas en la cual diariamente cada uno de ellos publica un nuevo articulo el cual se guarda en esta tabla.
Necesito hacer una consulta que me devuelva solamente el ultimo articulo que publico cada periodista (puede pasar que el ultimo articulo no sea la misma fecha para todos, en el caso que alguno no haya hecho el articulo todavia).
Como podría ser la columna?
La tabla es la siguiente:
columnas (id_columna, id_periodista, fecha_columna, titulo_columna, columna).
Muchas gracias por su ayuda!!!
SELECT periodista.nombrePeriodista , columnas.columna FROM columnas, periodistas WHERE periodista.id_periodista = columnas.id_periodista GROUP BY periodista.nombrePeriodista ORDER by columnas.fecha_columna DESC

Se me ocurrio al vuelo no se si es lo que necesitas pero da la impresion que si
  #7 (permalink)  
Antiguo 20/02/2010, 10:59
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 11 años, 8 meses
Puntos: 300
Respuesta: Consulta complicada

Creo que la propuesta de huesos52, aunque sin contar con los nombres correctos de campo, podría haberte servido para sacar al menos una parte de lo que querías. De todas formas, mira a ver si te sirve esta:

Código SQL:
Ver original
  1. SELECT t1.* FROM
  2.  (SELECT u.nombre, u.apellido, u.foto, c.id_columnista columnista, c.fecha, c.titulo, c.resumen, c.columna
  3.  FROM columnas c INNER JOIN usuarios u ON u.id = c.id_columnista
  4. ORDER BY c.id DESC)t1 GROUP BY t1.columnista

En teoría debía sacarte todos los datos del último trabajo de cada columnista (el último por el id de columnas) Yo no la he probado.
  #8 (permalink)  
Antiguo 20/02/2010, 11:48
 
Fecha de Ingreso: julio-2009
Ubicación: Montevideo, UY
Mensajes: 128
Antigüedad: 10 años, 4 meses
Puntos: 1
Respuesta: Consulta complicada

Hola, como les comenté, ya me funcionó (+ o - ).
Con esta consulta:
Código PHP:
SELECT usuarios.*, columnas.*, MAX(columnas.id)
FROM usuarioscolumnas
WHERE usuarios
.id columnas.id_columnista
GROUP BY id_columnista 
Logro mostrar campos de las 2 tablas, USUARIOS y COLUMNAS con la condición usuarios.id = columnas.id_columnista.
El tema es que quiero que me muestre la columna de cada usuario, pero la ultima que subio.
Se que la ultima es para cada ic_columnista la que tiene MAX(id).
El campo id hace referencia a cada columna que se sube, es un campo autonumerico.
Con esa consulta me muestra la mas vieja y no la mas nueva

Nuevamente, gracias si me pueden dar una mano en esto?
Saludos a todos.
  #9 (permalink)  
Antiguo 20/02/2010, 14:32
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 11 años, 8 meses
Puntos: 300
Respuesta: Consulta complicada

¿Has probado la consulta que te he propuesto...?
  #10 (permalink)  
Antiguo 20/02/2010, 14:50
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.321
Antigüedad: 12 años
Puntos: 2653
Respuesta: Consulta complicada

Vamos a probar, usando lo que te propone Jurena:
Código MySQL:
Ver original
  1. SELECT t1.*
  2.     FROM
  3.         (SELECT
  4.             u.nombre,
  5.             u.apellido,
  6.             u.foto,
  7.             c.id_columnista columnista,
  8.             c.fecha,
  9.              c.titulo,
  10.             c.resumen,
  11.             c.columna
  12.         FROM columnas c INNER JOIN usuarios u ON u.id = c.id_columnista
  13.         ORDER BY c.id,  c.fecha DESC) t1
  14. GROUP BY t1.columnista;
Solamente le estoy agregando un valor al ORDER BY.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 20/02/2010, 16:05
 
Fecha de Ingreso: julio-2009
Ubicación: Montevideo, UY
Mensajes: 128
Antigüedad: 10 años, 4 meses
Puntos: 1
Respuesta: Consulta complicada

Hola Jurena y Gnzsoloyo !
Ya probe la Consulta de Jurena y tambien la de Gnzsoloyo.
Y efectivamente me muestra un registro por cada columnista, pero no se por que razón me sigue mostrando el primero, o sea el más viejo, de cada columnista, en vez del ultimo.
Es como si hiciera un MIN(id).
Será algun tema de la base de datos del servidor??? ya no se que puede ser lo que ocasiona este resultado !
  #12 (permalink)  
Antiguo 20/02/2010, 16:10
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 10 años, 9 meses
Puntos: 360
Respuesta: Consulta complicada

pancho... postea los codigos que crean las tablas relacionadas y algunos inserts de ejemplo para detectar mas facil el problema.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #13 (permalink)  
Antiguo 20/02/2010, 23:55
 
Fecha de Ingreso: julio-2009
Ubicación: Montevideo, UY
Mensajes: 128
Antigüedad: 10 años, 4 meses
Puntos: 1
Respuesta: Consulta complicada

Acá mando los codigos:

Consulta que gagrega un nuevo usuario:
Código PHP:
$result mysql_query("INSERT INTO usuarios (nombre, apellido, nic, clave, tipo, foto)
VALUES ('$nombre', '$apellido', '$apellido', '$apellido', 3, '$nombre_foto')"
); 
Esto está verificado y lo guarda bien.

Consulta que gagrega una nueva columna:
Código PHP:
$result mysql_query("INSERT INTO columnas (id_columnista, fecha, titulo, resumen, columna)
VALUES ('$id', '$fecha_hoy', '$titulo', '$resumen', '$columna')"
); 
Esto está verificado y lo guarda bien. Los id son autonumericos.

Y con esta consulta estoy levantando la información en cuestión:
Código PHP:
$tabla mysql_query("SELECT t1.* FROM
(SELECT u.id, u.nombre, u.apellido, u.foto, c.id idd, c.id_columnista columnista, c.fecha, c.titulo, c.resumen, c.columna
FROM columnas c INNER JOIN usuarios u ON u.id = c.id_columnista
ORDER BY c.id,  c.fecha DESC) t1 GROUP BY t1.columnista;" 
);
if(
$tabla){
   while(
$reg mysql_fetch_array($tabla)) {
      echo
"<table style='table-layout:fixed'>
                  <tr>                                     <td width='387' align='left'>
                        <span class='texte7'><strong>"
.$reg[idd]."-".$reg['titulo']."</strong></span>                             </td>
                     <td align='right'><span class='texte7'>"
.$reg['fecha']."</span></td>
      </tr>
               </table>    
               <table width='100%' border='0' cellspacing='2' cellpadding='3' class='tabla' style='table-layout:fixed' >                          <col align='left' width='80px'/>
      <col align='left'  width='300px' />
      <tr>
         <td rowspan='2' valign='top'>
            <div style='float:left;'>
        <img src='admin/fotos_columnistas/"
.$reg['foto'].".jpg' hspace='5' width='75' height'75' clear:right;border:1px solid black'><br />
                   <span class='texte6' align='center'>&nbsp;&nbsp;"
.$reg['nombre']."<br />&nbsp;&nbsp;".$reg['apellido']."</span>
            </div>
         </td>
         <td valign='top'>    
            <span class='texto_para_detalle' align='right'>"
.$reg['resumen']." </span><br />                                     </td>
                  </tr>
                  <tr>
         <td align='right'valign='bottom'><a  class='usuario' href='noticia_detalle.php?id="
.$reg['id']."'> Leer nota </a></td>
      </tr>
               </table>"
;                    
            } 
// fin del while
         
}
      }
   }
?> 
  #14 (permalink)  
Antiguo 21/02/2010, 00:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.321
Antigüedad: 12 años
Puntos: 2653
Respuesta: Consulta complicada

Tres detalles:
1) Huesos52 se refería a los "CREATE TABLE `columnas`(...", etc. Es decir, a las sentencias de CREACIÓN de las tablas. No a otra cosa. Con ellas entenderemos mejor la estructura y comportamiento de las consultas.
2) La consulta en tu tercer código:
Código MySQL:
Ver original
  1.   (SELECT
  2.     u.id,
  3.     u.nombre,
  4.     u.apellido,
  5.     u.foto,
  6.     c.id idd,
  7.     c.id_columnista columnista,
  8.     c.fecha,
  9.     c.titulo,
  10.     c.resumen,
  11.     c.columna
  12. FROM columnas c
  13.   INNER JOIN usuarios u ON u.id = c.id_columnista
  14.   ORDER BY c.id, c.fecha DESC) t1
  15. GROUP BY t1.columnista;
No contiene ninguna función MAX(), de modo que puede no funcionar bien, para entenderlo mejor deberíamos conocer la estructura de la tabla.
3) No pongas código no SQL en este foro. Hace que el texto se vea "sucio" y resulta inentendible para los que no usamos esos lenguajes. Además esconde los problemas al usar variables en lugar de valores.

Probemos un código algo mejor:
Código MySQL:
Ver original
  1.   id, nombre, apellido, foto, MAX(idd) idd, columnista, fecha, titulo, resumen, columna
  2.   (SELECT
  3.     u.id,
  4.     u.nombre,
  5.     u.apellido,
  6.     u.foto,
  7.     c.id idd,
  8.     c.id_columnista columnista,
  9.     c.fecha,
  10.     c.titulo,
  11.     c.resumen,
  12.     c.columna
  13. FROM columnas c
  14.   INNER JOIN usuarios u ON u.id = c.id_columnista
  15.   ORDER BY c.id, c.fecha DESC) t1
  16. GROUP BY t1.columnista;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 21/02/2010, 15:14
 
Fecha de Ingreso: julio-2009
Ubicación: Montevideo, UY
Mensajes: 128
Antigüedad: 10 años, 4 meses
Puntos: 1
Respuesta: Consulta complicada

Muchas gracias Gnzsoloyo!!!!
Ahra sí, FUNCIONA !!!, me muestra lo que estaba necesitando!!!!
Esta última era la consulta que estaba necesitando !

Muchísimas gracias a todos los que me han ayudado
:apla uso:
A las órdenes,
Saludos,
Pancho.

Etiquetas: Ninguno
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 23:10.