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

>= y <=

Estas en el tema de >= y <= en el foro de Mysql en Foros del Web. al hacer una consulta a la BD quiero que me traiga como resultados que son >= y <= que las condiciones especificadas, pero el <= ...
  #1 (permalink)  
Antiguo 21/05/2008, 08:40
 
Fecha de Ingreso: marzo-2008
Mensajes: 13
Antigüedad: 16 años, 1 mes
Puntos: 0
>= y <=

al hacer una consulta a la BD quiero que me traiga como resultados que son >= y <= que las condiciones especificadas, pero el <= no me funciona, funciona pero como <, los resultados que son <= los deja fuera del resultado. Esta bien esta sintaxis o hay que emplear otra?. Desde ya muchas gracias. Dejo la consulta en cuestion
Código PHP:
$query=("Select * from players WHERE pl_apno >= '".$_POST['desde']."' and pl_apno <= '".$_POST['hasta']."' ORDER BY pl_apno"); 
  #2 (permalink)  
Antiguo 21/05/2008, 09:13
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Respuesta: >= y <=

Hola
Seria mejor que uses el BETWEEN y asi te evitas problemas

Saludos!
  #3 (permalink)  
Antiguo 21/05/2008, 09:25
 
Fecha de Ingreso: marzo-2008
Mensajes: 13
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: >= y <=

Lo probé y tampoco funciona, gracias igual Genetix, alguna otra idea?
  #4 (permalink)  
Antiguo 21/05/2008, 10:40
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: >= y <=

Creo que tu problema no es con MysQL. Lanza la consulta desde PHPMyADmin con datos concretos, sin variables, y con BETWEEN... AND... , como te aconseja Genetix, situando entre comillas y en este orden los datos de las fechas SELECT * FROM players WHERE pl_apno BETWEEN '2008-05-02' AND '2008-05-15'

Si funciona es que el problema lo tienes con las variables PHP, porque no carga alguna, no carga los datos en el orden adecuado (¿en qué orden se introducen los datos en los inputs, año-mes-día?).
Si no funcionara y hubiera fechas, tal vez el campofecha no es un campo DATE en la base.
Revisa todo eso.
  #5 (permalink)  
Antiguo 21/05/2008, 11:36
 
Fecha de Ingreso: marzo-2008
Mensajes: 13
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: >= y <=

jurena, gracias por responder, pero no hay ningun campofecha. Lo que quiero es hacer una consulta con un rango: que sea desde >= a "algo" y <= a "otra cosa", lo que no funciona es el <=, solo trae resultados q cumplen con el <, y no con el <=
  #6 (permalink)  
Antiguo 21/05/2008, 12:11
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: >= y <=

Y entonces ¿qué clase de campo es pl_apno? ¿qué guardas en él? ¿son números como INT, texto como VARCHAR o qué?
Pon un ejemplo concreto de tus datos y dinos qué quieres encontrar. Solo necesitamos la sintaxis de MySQL no de PHP.

Última edición por jurena; 21/05/2008 a las 14:19
  #7 (permalink)  
Antiguo 21/05/2008, 15: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, 4 meses
Puntos: 2658
Respuesta: >= y <=

1. ¿Estás seguro que existe algo que sea igual al límite superior del rango? Sería mejor que nos ejemplificaras con datos cómo se compondría el entorno cerrado ['desde';'hasta']. En este punto, la pregunta sería: Si estás pidiendo
Código:
SELECT * 
FORM players 
WHERE pl_apno >= 'desde' AND pl_apno <= 'hasta' ORDER BY pl_apno;
suponiendo que fuera algo así:

Código:
SELECT * 
FORM players 
WHERE pl_apno >= 'aaaa' AND pl_apno <= 'dddd' ORDER BY pl_apno;
y la lista de valores fuese
Código:
aaaa
bbbb
cccc
obviamente el 'dddd' jamás saldría porque simplemente no existe en la lista, así que te devolvería hasta 'cccc'.

2. ¿Estás seguro que el rango incluido es correcto, es decir que desde es menor que hasta?

3. El tema es que tal y como lo has planteado, la sentencia es correcta, por lo que DEBERIA devolver el conjunto. Si no te los devuelve es porque no cumplen la igualdad.

4. SI estás comparando strings, la cantidad de caracteres afecta. SI el rango superior fuese 'dddd', entonces 'ddddd' no pertenece al conjunto función.
__________________
¿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 22/05/2008, 06:47
 
Fecha de Ingreso: marzo-2008
Mensajes: 13
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: >= y <=

Gracias por responder. El campo pl_apno es de tipo TEXT y guarda apellidos y nombre.
Si en la tabla "players" estan guardados los siguientes apellidos:

MONJE
ALONSO
CARRIZO
ZANETTI
AHUMADA

y la consulta es

SELECT *
FROM players
WHERE pl_apno >= 'A' AND pl_apno <= 'Z' ORDER BY pl_apno;

deberia devolver todo el contenido de la tabla como resultado.
Pero de esa manera no incluye en el resultado a ZANETTI.
O sea, hay un valor en la tabla que se deberia incluir en el resultado y no lo hace.

Si hago la consulta de esta forma:
SELECT *
FROM players
WHERE pl_apno >= 'A' AND pl_apno <= 'ZZ' ORDER BY pl_apno;

si incluye a ZANETTI en el resultado, pero estoy agrandando el rango!!!

Tendrá algo que ver que el campo este definido como TEXT y no como VARCHAR?
Disculpen si no me explique correctamente.
  #9 (permalink)  
Antiguo 22/05/2008, 07:23
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: >= y <=

Claro que agrandas el rango, pero es que lo que buscas está dentro del rango agrandado y no del otro.
Me explico:
si dices antes de 'A' te recoge todo lo que empieza por A desde 'A', y 'A' está antes que 'AA', pero 'Z' está antes que 'Zanetti'. Si no, ordena una cadena de texto donde tengas escrito en un campo Z y en otro Za y verás cómo ordena la Z antes que Za. Puedes usar en lugar de ZZ , 'Z%'.
Pruébalo. Si vas a buscar por inicial, también podrías usar substr(nombrecampo,1,1):
un ejemplo que te busca todos los registros que hay entre la l y la m.
select * from tutabla where substring(campo,1,1) between 'l' and 'm' order by campo

Última edición por jurena; 22/05/2008 a las 11:29
  #10 (permalink)  
Antiguo 22/05/2008, 11:18
 
Fecha de Ingreso: marzo-2008
Mensajes: 13
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: >= y <=

Muchas gracias Jurena
  #11 (permalink)  
Antiguo 22/05/2008, 11:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: >= y <=

De nada, aunque la pista nos la dio gnzsoloyo.

Otra cosa: por qué usas TEXT para un campo que tal vez deberías tener como varchar. Revisa los requerimientos de tus datos y si no van a pasar los 255 caracteres, creo que varchar te ofrece algunas ventajas.
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 13:57.