Foros del Web » Programando para Internet » PHP »

Cómo crear un condicional en consulta en este caso.

Estas en el tema de Cómo crear un condicional en consulta en este caso. en el foro de PHP en Foros del Web. Hola. Tengo una consulta que termina de la siguiente manera: Código PHP: $sql  =  "SELECT  ... ... WHERE c.id=" . substr ( $_GET [ "id" ], ...
  #1 (permalink)  
Antiguo 08/10/2009, 18:52
Avatar de SI TAN SOLO TUVIERA  
Fecha de Ingreso: marzo-2006
Ubicación: Aburrilandia, US
Mensajes: 652
Antigüedad: 18 años, 1 mes
Puntos: 3
Pregunta Cómo crear un condicional en consulta en este caso.

Hola.

Tengo una consulta que termina de la siguiente manera:


Código PHP:
$sql "SELECT 
...
...
WHERE c.id="
.substr($_GET["id"],0,3).""

Algo raro este "id", pero explico. "id" puede ser: 123A, 345T, 564P, etc. La búsqueda sólo funciona o bota resultado con la parte numérica o que es lo mismo, los primeros 3 carácteres de "id", y por eso usé en PHP la función "substr" para que sólo me lea o adicione a "c.id" los primeros 3 números y se efectue la búsqueda en la BD satisfactoriamente.

Ahora, mi problema es el siguiente:

Dentro de poco "id" también podrá ser: 1234AB, 3456BC, 6789CM, etc. O sea, la parte numérica va a ser de 4 dígitos también y quisiera saber cómo puedo crear un "condicional" ahí que le agregue a "c.id" sólo la parte numérica independiente de si "id" es de 3 ó 4 dígitos .

Espero haberme hecho entender. Les agradezco cualquer idea o ayuda.
__________________
¿Dónde encontrar carros baratos en USA? En Autopten.
  #2 (permalink)  
Antiguo 08/10/2009, 21:25
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Cómo crear un condicional en consulta en este caso.

El problema es más de PHP, ya que la consulta ya debe estar armada con sólo los números.
Puedes, por ejemplo, usar preg_replace para quitar la parte no numérica:
Código php:
Ver original
  1. $texto = preg_replace('/^(\d+).*/', '\\1', $texto);

Tema transladado desde la sección de Mysql.

Saludos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 09/10/2009, 13:20
Avatar de SI TAN SOLO TUVIERA  
Fecha de Ingreso: marzo-2006
Ubicación: Aburrilandia, US
Mensajes: 652
Antigüedad: 18 años, 1 mes
Puntos: 3
Respuesta: Cómo crear un condicional en consulta en este caso.

Gracias David. Mis respetos para los que entienden las expresiones regulares.

Una última ayuda por favor. Tengo la misma pregunta replanteada.

¿Cómo le digo con MySQL o PHP que substraiga de "id" sólo la parte numérica de los primeros 4 caracteres?

Esto es lo que tengo:

Código PHP:
$sql "SELECT 
...
...
WHERE c.id="
.substr($_GET["id"],0,4).""
¿Qué otra función en PHP en este caso podría usar para que de estos 4 primeros caracteres sólo agarre la parte numérica, ya que "id" podría ser 1234 o bien 567PD, por ejemplo?

Crees que ésto esté correctamente planteado:

Código PHP:
$sql "SELECT 
...
...
WHERE c.id="
.substr(($_GET["id"] = preg_replace('/^(\d+).*/''\\1'$_GET["id"]),0,4).""
Ando bien perdido

Te agradezco enorme una última ayuda.
__________________
¿Dónde encontrar carros baratos en USA? En Autopten.
  #4 (permalink)  
Antiguo 09/10/2009, 13:27
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Cómo crear un condicional en consulta en este caso.

No necesitas usar substr. Sólo tienes que usar preg_replace() y listo:
Código PHP:
Ver original
  1. $sql = 'SELECT
  2. ...
  3. ...
  4. WHERE c.id=' . preg_replace('/^(\d+).*/', '\\1', $_GET["id"]);
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 09/10/2009, 14:29
Avatar de SI TAN SOLO TUVIERA  
Fecha de Ingreso: marzo-2006
Ubicación: Aburrilandia, US
Mensajes: 652
Antigüedad: 18 años, 1 mes
Puntos: 3
Respuesta: Cómo crear un condicional en consulta en este caso.

Código PHP:
$sql 'SELECT
...
...
WHERE c.id=' 
preg_replace('/^(\d+).*/''\\1'$_GET["id"]); 
David, sólo para no quedarme con la duda, podrías por favor decirme en qué parte el preg_replace le estaría diciendo a "id" que se limite a hacer la conversión sólo a los primeros 4 caracteres de éste?

Muchas Gracias por toda la ayuda, no molesto más.
__________________
¿Dónde encontrar carros baratos en USA? En Autopten.
  #6 (permalink)  
Antiguo 09/10/2009, 14:43
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Cómo crear un condicional en consulta en este caso.

No es que le diga que tome sólo los primeros 4 caracteres. Toma todos los dígitos con que empieza la cadena, eliminando el resto. Si la cadena fuera "04321AB", por ejemplo, tomaría "04321".
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 09/10/2009, 15:52
Avatar de SI TAN SOLO TUVIERA  
Fecha de Ingreso: marzo-2006
Ubicación: Aburrilandia, US
Mensajes: 652
Antigüedad: 18 años, 1 mes
Puntos: 3
Respuesta: Cómo crear un condicional en consulta en este caso.

OK David entiendo. Entonces sí creo que debería usar el "substr" porque la búsqueda sólo funciona con valores entre 1 y 9999. Si "id" es 1234RT567, quedaría convertida en: 1234567 y botaría error.

Por eso te preguntaba anteriormente si estaría bien hacerlo así, si estaría bien declarado esto así:

Código PHP:
$sql 'SELECT
...
...
WHERE c.id='
.substr((preg_replace('/^(\d+).*/''\\1'$_GET["id"]),0,4); 
Para que la parte numérica que va sustraer no vaya a ser de más de 4 caracteres.


¡Gracias!
__________________
¿Dónde encontrar carros baratos en USA? En Autopten.
  #8 (permalink)  
Antiguo 09/10/2009, 15:56
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Cómo crear un condicional en consulta en este caso.

Cita:
Iniciado por SI TAN SOLO TUVIERA Ver Mensaje
OK David entiendo. Entonces sí creo que debería usar el "substr" porque la búsqueda sólo funciona con valores entre 1 y 9999. Si "id" es 1234RT567, quedaría convertida en: 1234567 y botaría error.
No, en realidad quedaría como "1234", ya que:
Cita:
Iniciado por David
Toma todos los dígitos con que empieza la cadena, eliminando el resto.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #9 (permalink)  
Antiguo 09/10/2009, 16:22
Avatar de SI TAN SOLO TUVIERA  
Fecha de Ingreso: marzo-2006
Ubicación: Aburrilandia, US
Mensajes: 652
Antigüedad: 18 años, 1 mes
Puntos: 3
Respuesta: Cómo crear un condicional en consulta en este caso.

Perfecto David. Ahora sí, tan claro como el agua.

Te agradezco toda la ayuda viejo, me ire a probar.
__________________
¿Dónde encontrar carros baratos en USA? En Autopten.
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 19:52.