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

SQL Syntax Error en mi consulta

Estas en el tema de SQL Syntax Error en mi consulta en el foro de Bases de Datos General en Foros del Web. Hola a todos, La estructura de mi tabla es la siguiente: idN (INT 3) title (VARCHAR 255) textN (TEXT) postedby (VARCHAR 20) postedon (DATETIME) Y ...
  #1 (permalink)  
Antiguo 16/12/2004, 14:14
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 19 años, 7 meses
Puntos: 5
SQL Syntax Error en mi consulta

Hola a todos,

La estructura de mi tabla es la siguiente:

idN (INT 3)
title (VARCHAR 255)
textN (TEXT)
postedby (VARCHAR 20)
postedon (DATETIME)

Y tengo ese code en PHP:

Código PHP:
$from="December 2004";
$ssql="SELECT *, DATE_FORMAT(postedon,'%M %Y') AS dateGroup FROM news WHERE dateGroup='$from' ORDER by idN DESC";
$rs=mysql_query($ssql) or die(mysql_error()); 
Eso me devuelve el siguiente error:

Unknown column 'dateGroup' in 'where clause'

¿Por qué?
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #2 (permalink)  
Antiguo 16/12/2004, 14:19
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Aunque pongas el "As" en la select a una expresión, debes usar los nombres de las columnas que tienen en las tablas:
Código PHP:
$from="December 2004"
$ssql="SELECT *, DATE_FORMAT(postedon,'%M %Y') AS dateGroup FROM news WHERE postedon='$from' ORDER by idN DESC"
$rs=mysql_query($ssql) or die(mysql_error()); 
Un saludo.
__________________
Estoy contagiado de Generación-I

Última edición por Vice; 16/12/2004 a las 14:20
  #3 (permalink)  
Antiguo 16/12/2004, 18:45
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 19 años, 7 meses
Puntos: 5
¿Entonces para qué me sirve el alias del AS?...

El AS con el DATE_FORMAT es precisamente para que el campo DATETIME sea convertido al formato MES AÑO y poder hacer la consulta.

Probé como me indicastes, pero la consulta no me devuelve nada. Ni siquiera error. Simplemente no devuelve ningún resultado.
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #4 (permalink)  
Antiguo 16/12/2004, 18:54
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 19 años, 7 meses
Puntos: 5
Acabo de leer esto en el manual y tienes razón:

Standard SQL doesn't allow you to refer to a column alias in a WHERE clause. This is because when the WHERE code is executed, the column value may not yet be determined. For example, the following query is illegal:

SELECT id, COUNT(*) AS cnt FROM tbl_name WHERE cnt > 0 GROUP BY id;

¿Cómo puedo hacer entonces?

Simplemente necesito seleccionar todos los registros que estén en Diciembre de 2004.
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.

Última edición por Takitei; 16/12/2004 a las 19:03
  #5 (permalink)  
Antiguo 17/12/2004, 01:37
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Lo que tienes que hacer es darle a la variable $from el formato adecuado a como se guarda en la base de datos, si el formato de $from es el que llevas en la select puedes ponerlo así:
Código PHP:
$from="December 2004";
$ssql="SELECT *, DATE_FORMAT(postedon,'%M %Y') AS dateGroup FROM news WHERE date_format(postedon,'%M %Y')='$from' ORDER by idN DESC";
$rs=mysql_query($ssql) or die(mysql_error()); 
Un saludo.
__________________
Estoy contagiado de Generación-I
  #6 (permalink)  
Antiguo 17/12/2004, 15:07
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 19 años, 7 meses
Puntos: 5
Ahhh ok !!!... asi si funciona bro!...

No sabia que podía hacer un ALIAS dentro de la cláusula WHERE. Gracias colega!... me has resuelto un problema que tenía días en espera.

Gracias nuevamente!
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #7 (permalink)  
Antiguo 17/12/2004, 15:30
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 19 años, 7 meses
Puntos: 5
Sin embargo viejo... otra dudita.

Cuando la variable $from tiene un valor incorrecto, por ejemplo: Dec 3000 (algo totalmente incorrecto)... SQL no me devuelve ningún error. Simplemente no me muestra nada.

¿Cómo podría hacer para que cuando no se encuentre nada... me devuelva un error o algún mensajito?

Código PHP:
$from="December 2004";
$ssql="SELECT *, DATE_FORMAT(postedon,'%M %Y') AS dateGroup FROM news WHERE date_format(postedon,'%M %Y')='$from' ORDER by idN DESC";
$rs=mysql_query($ssql) or die(mysql_error());
while(
$row=mysql_fetch_array($rs)){
 ...

__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #8 (permalink)  
Antiguo 17/12/2004, 15:41
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 20 años
Puntos: 2
Es que no tiene por qué devolverte un error, tú estás comparando con una cadena y él no sabe si es válida o no.

Lo mejor sería que antes de hacer la consulta comprobases que el formato de $from es correcto (yo utilizaría expresiones regulares).
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #9 (permalink)  
Antiguo 18/12/2004, 10:08
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 19 años, 7 meses
Puntos: 5
Eh... pero si ningun registro coincide...¿no debería devolver un error?
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #10 (permalink)  
Antiguo 18/12/2004, 12:24
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 20 años
Puntos: 2
Pero es que el que no encuentre un registro determinado no es un error. Imaginate que buscas a las personas mayores de 65 años en una base de datos ¿Sería un error que no hubiese personas con esa edad?. Tu puedes comprobar el número de registros devueltos con mysql_num_rows() y decidir si es un error o no pero mysql no puede ni debería determinar que eso es un error.
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #11 (permalink)  
Antiguo 18/12/2004, 15:14
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 19 años, 7 meses
Puntos: 5
Perfecto!... ahora si funciona como yo quiero. Usé el mysql_num_rows() y gestioné los resultados que sean distintos a 0. Cuando son iguales a 0 entonces muestra un error.

Un saludo, gracias living, gracias Vice.
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
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 14:28.