PHP - MYSQL: Seleccionar por las primeras cifras de una celda

Iniciado por Alex_bro, 19 Septiembre 2007, 16:09 PM

0 Miembros y 1 Visitante están viendo este tema.

Alex_bro

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.

[ Alberto]

Debemos de hacer todas las cosas sencillas, excepto las cosas sencillas

Alex_bro

Pero para esa funcion no tendria que estar la fecha en formuato YYYY-MM-DD? es decir, separando los datos con algun caracter...

Saludos

Azielito

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 (sql) [Seleccionar]
INSERT INTO `tabla` (id,fecha,contenido) VALUES(null,NOW(),'texto xD');

y listo >.<

luego solo pones un formulario donde selecciona un rango de fechas

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

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

Alex_bro

#4
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

Azielito

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

:)

Alex_bro

#6
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:

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

[ Alberto]

si lo soporta, puede ser un error de sintaxis, reviza bien el scrip
Debemos de hacer todas las cosas sencillas, excepto las cosas sencillas

Alex_bro

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.

^Tifa^

#9
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;
:)