Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Alex_bro en 19 Septiembre 2007, 16:09 pm



Título: PHP - MYSQL: Seleccionar por las primeras cifras de una celda
Publicado por: Alex_bro en 19 Septiembre 2007, 16:09 pm
Buenas,
tengo una db de noticias con una columna llamada fecha con datos del tipo 20070102,
para no tener que hacer 3 columnas diferentes para cada dato (tal vez sea mala idea a la larga?)... y ahora quiero hacer un buscador para que el usuario busque en el archivo segun el ano, o ano + mes... como podria hacer algo asi? es decir que si quiere ver todas las noticias de 2005, como haria para mostrar todas las filas en cuyo dato de la columna fecha sea 2005... ?

Gracias.


Título: Re: PHP - MYSQL: Seleccionar por las primeras cifras de una celda
Publicado por: [ Alberto] en 19 Septiembre 2007, 19:05 pm
usa YEAR(date)
Devuelve el año para una fecha
funciones con fechas http://mysql.conclase.net/curso/index.php?cap=011a


Título: Re: PHP - MYSQL: Seleccionar por las primeras cifras de una celda
Publicado por: Alex_bro en 19 Septiembre 2007, 19:20 pm
Pero para esa funcion no tendria que estar la fecha en formuato YYYY-MM-DD? es decir, separando los datos con algun caracter...

Saludos


Título: Re: PHP - MYSQL: Seleccionar por las primeras cifras de una celda
Publicado por: Azielito en 19 Septiembre 2007, 20:45 pm
cambia el tipo de campo a DATE y entonces solo te  preocupas de insertar bien la fecha al registro, aun que con la funcion NOW() te resuelves el problema
Código
  1. INSERT INTO `tabla` (id,fecha,contenido) VALUES(NULL,NOW(),'texto xD');

y listo >.<

luego solo pones un formulario donde selecciona un rango de fechas

Citar
selecciona fecha de inicio: Dia[___]Mes:[______]Año:[_____]
Fecha de termino: Dia[___]Mes:[______]Año:[_____]

y luego el query es mas facil xD
Código
  1. SELECT * FROM `noticias` WHERE fecha BETWEEN '$anyio-$mes-$dia' AND '$anyo2-$mes2-$dia2' LIMIT X,x


Título: Re: PHP - MYSQL: Seleccionar por las primeras cifras de una celda
Publicado por: Alex_bro en 19 Septiembre 2007, 20:57 pm
Gracias, aunque necesitaria la fecha completa para la comparacion... como podria hacer que por ejemplo comparara tambien si el usuario solo introduce el el año o el año y mes?

EDITO: ya esta arreglado, pues me di cuenta de que si no quieres dar un mes o dia concreto pones el minimo en 0 y el maximo en 12 o 31 respectivamente y listo...

Saludos.
PD: me he fijado que google pilla los temas de este foro a los pocos minutos  :o


Título: Re: PHP - MYSQL: Seleccionar por las primeras cifras de una celda
Publicado por: Azielito en 19 Septiembre 2007, 21:39 pm
xD

Deja por default unos valores en los campos del tipo "select" del formulario

podrias hacer alguna funcion para que tome las fechas que ya tienes y las convierta en fecha "real/normal" a la base de datos, para esto mira este link
http://www.programacionweb.net/articulos/articulo/?num=112

:)


Título: Re: PHP - MYSQL: Seleccionar por las primeras cifras de una celda
Publicado por: Alex_bro en 20 Septiembre 2007, 13:48 pm
Buenas,
disculpenme por ser tan pesado pero... que version de mysql es requerida para usar BETWEEN? es que tengo instalada la 4 y me aparece el siguiente error:

Citar
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...

Saludos.


Título: Re: PHP - MYSQL: Seleccionar por las primeras cifras de una celda
Publicado por: [ Alberto] en 20 Septiembre 2007, 22:22 pm
si lo soporta, puede ser un error de sintaxis, reviza bien el scrip


Título: Re: PHP - MYSQL: Seleccionar por las primeras cifras de una celda
Publicado por: Alex_bro en 21 Septiembre 2007, 00:26 am
Yo he utilizado el SQL que ha posteado Azielito, solo le cambie el LIMIT a 5  :-X

Saludos y gracias.
PD: si no es molestia... como seria para aniadirle otro condicional a WHERE? es decir, poner algo como "AND categoria=$cat" ya que con lo de BETWEEN me confundo un poco.


Título: Re: PHP - MYSQL: Seleccionar por las primeras cifras de una celda
Publicado por: ^Tifa^ en 21 Septiembre 2007, 04:48 am
A lo mejor no acabe de comprender tu peticion, o a lo mejor esto no te sirva, pero ya que quieres algo para semi-sustituir between puedes usar algo como;

select * from tabla where fecha >= '$año-$mes-$dia' and fecha <='$anio2-$mes2-$dia2' limit x ;

Recuerden que limit x no es una clausula SQL sino de Mysql, en SQL es top x..
digase por ejemplo :  select top 10 max(notas) from alumnos ;  mientras en Mysql lo hariamos ;  select max(notas) from alumnos limit 10;
:)


Título: Re: PHP - MYSQL: Seleccionar por las primeras cifras de una celda
Publicado por: Alex_bro en 21 Septiembre 2007, 14:22 pm
Esto ya es muy raro... me sigue tirando el error:
Citar
Warning: 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 ''noticias' WHERE fecha >= '2006-01-01' and fecha <='2007-12-31' LIMIT 5' ...

Que puede ser? uso el mismo codigo aqui publicado, no se me ocurre que mas...

Saludos.


Título: Re: PHP - MYSQL: Seleccionar por las primeras cifras de una celda
Publicado por: ^Tifa^ en 21 Septiembre 2007, 18:04 pm
Algo estas poniendo mal en el query, estas haciendo algo parecido a esto??

select * from ''noticias' WHERE fecha >= '2006-01-01' and fecha <='2007-12-31' LIMIT 5' ;

porque si es asi, ten pendiente que "noticias' no lleva comillas ni simples ni dobles, corrigeme sino lo tienes asi, pero si pusiste comillas si dara error, ya que el query deberia ser;

select * from noticias where fecha >= '2006-01-01' and fecha <='2007-12-31' LIMIT 5' ;


Título: Re: PHP - MYSQL: Seleccionar por las primeras cifras de una celda
Publicado por: Alex_bro en 21 Septiembre 2007, 19:17 pm
Muchas gracias!  ;D

Sinceramente pido disculpas... ha sido fallo mio, confundi los ` por la comilla ' del ejemplo y por eso el lio...

Gracias de nuevo  ;D


Título: Re: PHP - MYSQL: Seleccionar por las primeras cifras de una celda
Publicado por: Azielito en 21 Septiembre 2007, 20:37 pm
see =)

Mira, si estas en PHP (que spongo que si) y en mysql (que por el mensage de error casi aseguro que si xD)

ponele un "or die" al final

Código
  1. $sql = "SELECT * FROM `noticias` WHERE `fecha` BETWEEN '$fecha1' AND '$fecha2'";
  2. mysql_query($sql,$link) or die(mysql_error());

asi te dara mejor el error en caso de que te equivoques en nombre de campos, en comillas no serradas y asi =)