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

problemas con un select en mysql

Estas en el tema de problemas con un select en mysql en el foro de Bases de Datos General en Foros del Web. tengo un problema quiero realizar una consulta este es mi select ('select * from temas group by categoria order by fecha desc'; yo quiero q ...
  #1 (permalink)  
Antiguo 06/06/2010, 14:20
Avatar de elchicho118  
Fecha de Ingreso: mayo-2010
Mensajes: 74
Antigüedad: 14 años
Puntos: 1
Pregunta problemas con un select en mysql

tengo un problema quiero realizar una consulta este es mi select


('select *
from temas group by categoria order by fecha desc';

yo quiero q ese select me devuelva los datos ordenados por categoria eso me lo devuelve bien.

pero tambien quiero que me lo ordene por la fecha mas reciente...

es decir que de cada categoria me aparesca el registro que tenga la fecha mas reciente y no lo hace

quisiera saber como debo hacerlo y que estoy haciendo mal
  #2 (permalink)  
Antiguo 06/06/2010, 15:41
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: problemas con un select en mysql

Pregunta ya respondida en PHP: como se puede hacer este select en mysql

La respuesta es la misma:
Código MySQL:
Ver original
  1. SELECT tema, autor, fecha, categoria
  2.   (SELECT tema, autor, fecha, categoria
  3.   FROM temas
  4.   ORDER BY fecha DESC)  T1
  5. GROUP BY categoria;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 06/06/2010, 18:46
Avatar de elchicho118  
Fecha de Ingreso: mayo-2010
Mensajes: 74
Antigüedad: 14 años
Puntos: 1
Respuesta: problemas con un select en mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Pregunta ya respondida en PHP: [URL="http://www.forosdelweb.com/f18/como-puede-hacer-este-select-mysql-813626/#post3432014"]como se puede hacer este select en mysql[/URL]

La respuesta es la misma:
Código MySQL:
Ver original
  1. SELECT tema, autor, fecha, categoria
  2.   (SELECT tema, autor, fecha, categoria
  3.   FROM temas
  4.   ORDER BY fecha DESC)  T1
  5. GROUP BY categoria;
no esta respondido porque me da error eso asi
  #4 (permalink)  
Antiguo 06/06/2010, 19:04
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: problemas con un select en mysql

¿Qué error te da?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 06/06/2010, 19:07
Avatar de elchicho118  
Fecha de Ingreso: mayo-2010
Mensajes: 74
Antigüedad: 14 años
Puntos: 1
Respuesta: problemas con un select en mysql

Problemas en el select:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT nombre, edad, domicilio, sexo FROM visitantes ORDER BY fecha DESC) T' at line 2


ese error me da cuando intento hacerlo asi
  #6 (permalink)  
Antiguo 06/06/2010, 19:11
Avatar de elchicho118  
Fecha de Ingreso: mayo-2010
Mensajes: 74
Antigüedad: 14 años
Puntos: 1
Respuesta: problemas con un select en mysql

yo solo lo que quiero es hacer un select que me lo agrupe por una categoria y que el resultado de cada categoria sea la fecha mas reciente
  #7 (permalink)  
Antiguo 06/06/2010, 20:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: problemas con un select en mysql

Bien, he revisado la sintaxis que te propongo, y cumple exactamente con lo buscado.
Me explico:
La consulta interior genera una tabla virtual con todos los registros ordenados por fecha en forma descendente (del más reciente al más viejo). Esta tabla debe ir encerrada entre paréntesis para ser usada como tabla de origen de la consulta exterior; pero como la tabla resultado es lo que se denomina "tabla derivada", entonces debe ir llevar un alias, para ser usada en el FROM de la consulta exterior. De allí el alias "T1".
La consulta exterior simplemente toma ese resultado y agrupa por categoría.
Código MySQL:
Ver original
  1. SELECT tema, autor, fecha, categoria
  2.   (SELECT tema, autor, fecha, categoria
  3.   FROM temas
  4.   ORDER BY fecha DESC)  T1
  5. GROUP BY categoria;
La sentencia, tal y como está puesta no tiene errores de sintaxis. Ya la probé.
En ese sentido, hay sólo dos posibilidades:

1) Un error al copiar la sentencia. No puedo saberlo si no posteas una copia de lo que usaste.

2) Estás usando una versión muy vieja de MySQL. No puedo saberlo, si no me dices cuál versión de MySQL usas.

De todos modos, mirado con cuidado lo que pides al final, te propongo esta alternativa:
Código MySQL:
Ver original
  1. SELECT tema, autor, MAX(fecha), categoria
  2. FROM temas
  3. GROUP BY categoria
  4. ORDER BY categoria, tema, autor;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 06/06/2010, 20:18
Avatar de elchicho118  
Fecha de Ingreso: mayo-2010
Mensajes: 74
Antigüedad: 14 años
Puntos: 1
Respuesta: problemas con un select en mysql

mas o menos con algo asi estaba tratando ahora mismo

pero ya se de donde deriva el error

lo que pasa es que la consulta no me esta trayendo el mismo registro

la fecha es la mas reciente pero en el campo autor no corresponde
  #9 (permalink)  
Antiguo 06/06/2010, 20:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: problemas con un select en mysql

Cita:
la fecha es la mas reciente pero en el campo autor no corresponde
Entonces el agrupamiento que estás buscando no es solamente por categoría...
Tienes que aplicar los criterios correctos al hacer la consulta, entonces.
SI quieres los mensajes de una sola persona, entonces además de todo eso deberás usar el WHERE:
Código MySQL:
Ver original
  1. SELECT tema, autor, MAX(fecha), categoria
  2. FROM temas
  3. WHERE autor = 'autorbuscado'
  4. GROUP BY categoria
  5. ORDER BY categoria, tema;
Donde autorbuscado sería el autor que estás tratando de encontrar, y por tanto ese valor se incorpora dinámicamente en la consulta.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 06/06/2010, 20:36
Avatar de elchicho118  
Fecha de Ingreso: mayo-2010
Mensajes: 74
Antigüedad: 14 años
Puntos: 1
Respuesta: problemas con un select en mysql

lo que quiero es el autor que este en el mismo registro de la fecha mas reciente

ese select es para un foro
estoy tratando que el registro que tenga la fecha mas reciente de cada categoria se muestre

pero me lo esta agrupando por categoria, lo hace bien.
la fecha mas reciente me muestra la mas reciente
pero el autor no coincide con la fecha mas reciente

esto es lo que estoy tratando de hacer

<?php


}
//primero me conecto a la base de datos

$conexion=mysql_connect("localhost","root","")
or die("Problemas en la conexion");
mysql_select_db("foro",$conexion) or
die("Problemas en la seleccion de la base de datos");

// este es el select que estoy tratando de hacer
$registro=mysql_query("select categoria,autor, max(fecha) as fecha
from temas group by categoria order by categoria,autor,fecha ",$conexion)
or die("Problemas en el select".mysql_error());


// busco la cantidad de registros de la consulta
$can= mysql_num_rows($registro);

//dependiendo de cuantos registros sean este while finaliza
while ($can>0){

if ($row = mysql_fetch_array($registro))

{

// guardo los registros de la consulta en una variable
$categoria=$row['categoria'];
$tema=$row['autor'];
$fecha=$row['fecha'];

}// hago un case dependiendo de la categoria la variable se va a guardar en otra
switch($categoria){
case "¿ quien eres tu ?":
$presentate=$tema;
$fecha1=$fecha;
break;

case "temas calientes":
$calientes=$tema;
$fecha2=$fecha;

break;

case "pa donde e":
$lachercha=$tema;
$fecha3=$fecha;

break;

case "chismes":
$chisme=$tema;
$fecha4=$fecha;

break;

case "temas de amor":
$amor=$tema;
$fecha5=$fecha;

break;

case "hablemos de dios":
$dios=$tema;
$fecha6=$fecha;
break;

case "noticias":
$noticias=$tema;
$fecha7=$fecha;

break;

case "musicas cristianas":
$cristiano=$tema;
$fecha8=$fecha;
break;

case "hip hop,rap,reguee y dembow":
$rap=$tema;
$fecha9=$fecha;
break;

case "salsa":
$salsa=$tema;
$fecha10=$fecha;
break;

case "baladas":
$baladas=$tema;
$fecha11=$fecha;
break;

case "otras";
$otras=$tema;
$fecha12=$fecha;
break;

}
//aqui decremento la cantidad de registros
$can--;
}

?>
  #11 (permalink)  
Antiguo 06/06/2010, 21:19
Avatar de elchicho118  
Fecha de Ingreso: mayo-2010
Mensajes: 74
Antigüedad: 14 años
Puntos: 1
Respuesta: problemas con un select en mysql

ya lo resolvi gracias por tratar de ayudar

borre todos los registros de la tabla y ahora cuando le ingreso los nuevos me funciona bien
esa fue la ultima alternativa que vi

no se si el erro era porque al principio introduje algunos valores en la misma base de datos .



Cita:
Iniciado por gnzsoloyo Ver Mensaje
Entonces el agrupamiento que estás buscando no es solamente por categoría...
Tienes que aplicar los criterios correctos al hacer la consulta, entonces.
SI quieres los mensajes de una sola persona, entonces además de todo eso deberás usar el WHERE:
Código MySQL:
Ver original
  1. SELECT tema, autor, MAX(fecha), categoria
  2. FROM temas
  3. WHERE autor = 'autorbuscado'
  4. GROUP BY categoria
  5. ORDER BY categoria, tema;
Donde autorbuscado sería el autor que estás tratando de encontrar, y por tanto ese valor se incorpora dinámicamente en la consulta.
  #12 (permalink)  
Antiguo 06/06/2010, 22:15
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: problemas con un select en mysql

Es probable que haya tenido alguna relación; habría que haber revisado la tabla con mucho detalle.
De todos modos hay algo de cierto en lo que se refiere a que en estas consultas algunos datos se parecen mezclar como describías. Lo he visto antes, pero en esos casos he logrado resolverlas cambiando a veces el orden de los campos en el SELECT, o armando las consultas en formas segmentadas.
A mi entender hay probablemente algún tipo de bug en esta clase de consultas agrupadas, que se manifiesta de esa forma. En realidad no lo he investigado como tal.

Me alegro que solucionaras el problema
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 07/06/2010, 11:13
Avatar de elchicho118  
Fecha de Ingreso: mayo-2010
Mensajes: 74
Antigüedad: 14 años
Puntos: 1
Respuesta: problemas con un select en mysql

crei q lo habia resolvido ayer porque lo hice con la fecha solamente sin el nick
me la actualiza bien me da la ultima
si lo pongo si me devuelve la fecha bien la mas reciente:
se actualiza y todo bien

select categoria,nick, max(fecha)
from temas group by categoria order by fecha desc;


pero cuando lo pongo asi para que me de el autor

select categoria,autor, max(fecha)
from temas group by categoria order by fecha desc;

vuelve el mismo problema

me da la fecha y el nick al principio bien
pero despues cuando se ingresa otra fecha mas reciente se queda igual no se actualiza

no se porque



Cita:
Iniciado por gnzsoloyo Ver Mensaje
Es probable que haya tenido alguna relación; habría que haber revisado la tabla con mucho detalle.
De todos modos hay algo de cierto en lo que se refiere a que en estas consultas algunos datos se parecen mezclar como describías. Lo he visto antes, pero en esos casos he logrado resolverlas cambiando a veces el orden de los campos en el SELECT, o armando las consultas en formas segmentadas.
A mi entender hay probablemente algún tipo de bug en esta clase de consultas agrupadas, que se manifiesta de esa forma. En realidad no lo he investigado como tal.

Me alegro que solucionaras el problema

Etiquetas: mysql, select
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:07.