Foros del Web » Programando para Internet » PHP »

If dentro de un query

Estas en el tema de If dentro de un query en el foro de PHP en Foros del Web. Hola, hace tiempo no escribía. Tengo una duda ¿se pueden colocar if dentro de una consulta mysql? y si se puede ¿como es la sintaxis? ...
  #1 (permalink)  
Antiguo 29/11/2005, 18:11
Avatar de jpvilar  
Fecha de Ingreso: febrero-2005
Ubicación: Buenos Aires - Argentina
Mensajes: 128
Antigüedad: 12 años, 10 meses
Puntos: 1
Pregunta If dentro de un query

Hola, hace tiempo no escribía. Tengo una duda ¿se pueden colocar if dentro de una consulta mysql? y si se puede ¿como es la sintaxis?
Explico un poco mejor, tengo un formulario de búsqueda con varios parámetros de búsqueda donde lo apunto a una página que lo que hace es guardar la consulta en la base de datos. Luego lo redirecciona a la misma página (no es importante si es la misma o no) con un header: Location ...
En la página destino hago el query para sacar la búsqueda y hacer el query definitivo que me traiga los resultados pero me encuentro que cuando los parámetros son inexistentes en la base de datos no trae resultados ... pego el código a ver si se entiende mejor, soy muy malo escribiendo.

// Página q recibe el POST //
mysql_query("insert into empresas_busqueda_cv set empresa_busqueda_cv_contacto='$_POST['cont']', empresa_busqueda_cv_tipo_puesto='$_POST['tipo_puesto']', empresa_busqueda_cv_area='$_POST['area']', empresa_busqueda_cv_industria='$_POST['industria']', empresa_busqueda_cv_tipo_est='$_POST['tipo_estudio']', empresa_busqueda_cv_provincia='$_POST['provincia']', empresa_busqueda_cv_sexo='$_POST['sexo']', empresa_busqueda_cv_time=NOW()");
$ultimo = mysql_insert_id();
header("Location: ../emp.cuenta.php?archivo=busqueda&busqueda=$ultimo") ;
exit;


// QUERY DE BÚSQUEDA //

$bu = mysql_query("select * from empresas_busqueda_cv where empresa_busqueda_cv_id='$busqueda'");
$bus = mysql_fetch_array($bu);

$cad = mysql_query("select concat(users.user_apellido,', ',users.user_nombre)as nombre, DATE_FORMAT(users.user_cumpleanos, '%d-%m-%Y')as fecha_nac, users.user_id, users.user_sexo, sexos.sexo_id, sexos.sexo_nombre, users_preferencias.user_preferencia_id, users_preferencias.user_preferencia_objetivo, preferencias_areas.preferencia_area_area, preferencias_industria.preferencia_industria_indus tria, provincias.provincia_nombre, paises.pais_nombre from users, sexos, users_preferencias, preferencias_areas, preferencias_industria, provincias, paises where users.user_activo='1' and sexos.sexo_id=users.user_sexo and users_preferencias.user_preferencia_user=users.use r_id and provincias.provincia_id=users.user_provincia and paises.pais_id=users.user_pais and preferencias_areas.preferencia_area_user=users.use r_id and preferencias_areas.preferencia_area_area='$bus[empresa_busqueda_cv_area]' and preferencias_industria.preferencia_industria_indus tria='$bus[empresa_busqueda_cv_industria]' and preferencias_industria.preferencia_industria_user= users.user_id order by users.user_apellido, users.user_nombre LIMIT $inicial, $cantidad");


// acá tengo el tema ya que en las tablas preferencias_industria y preferencias_areas (son los filtros de búsqueda) no existe el valor 0, o sea que si cuando busco no elijo por ejemplo área el valor de $area es 0 entonces no me encuentra nada. O sea que quiero hacer un solo query que busque aunque uno de los parámetros de filtro tenga valor 0

Espero se entienda, yo ya estoy quemado y seguramente no estoy viendo el bosque atrás del árbol.
Lo que había pensado pero no me funciona es:

$bu = mysql_query("select * from empresas_busqueda_cv where empresa_busqueda_cv_id='$busqueda'");
$bus = mysql_fetch_array($bu);

$cad = mysql_query("select concat(users.user_apellido,', ',users.user_nombre)as nombre, DATE_FORMAT(users.user_cumpleanos, '%d-%m-%Y')as fecha_nac, users.user_id, users.user_sexo, sexos.sexo_id, sexos.sexo_nombre, users_preferencias.user_preferencia_id, users_preferencias.user_preferencia_objetivo, preferencias_areas.preferencia_area_area, preferencias_industria.preferencia_industria_indus tria, provincias.provincia_nombre, paises.pais_nombre from users, sexos, users_preferencias, preferencias_areas, preferencias_industria, provincias, paises where users.user_activo='1' and sexos.sexo_id=users.user_sexo and users_preferencias.user_preferencia_user=users.use r_id and provincias.provincia_id=users.user_provincia and paises.pais_id=users.user_pais"

if ($bus[empresa_busqueda_cv_area] != "0") {
." and preferencias_areas.preferencia_area_user=users.use r_id and preferencias_areas.preferencia_area_area='$bus[empresa_busqueda_cv_area]'"
}
if ($bus[empresa_busqueda_cv_industria] != "0") {
." and preferencias_industria.preferencia_industria_indus tria='$bus[empresa_busqueda_cv_industria]' and preferencias_industria.preferencia_industria_user= users.user_id"
}
." order by users.user_apellido, users.user_nombre LIMIT $inicial, $cantidad");


De esta manera tomaría las variables que si tienen valor como filtro y me resolvería el problema ... creo.
Espero sugerencias por favor.
Saludos
__________________
JuanP
QUIEN NO SE EQUIVOCA NO APRENDE ...
QUIEN NO APRENDE SE EQUIVOCA ... PERO NO APRENDE
  #2 (permalink)  
Antiguo 29/11/2005, 20:23
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 12 años, 8 meses
Puntos: 17
Para la próxima trata de encerrar el código PHP entre [ php ] y [ /php ] (todo junto).
Como lo planteaste es imposible hacerlo... se tiene q hacer de otra forma, por ejemplo definir como variables los strings que irían.
Código PHP:
$bu mysql_query("select * from empresas_busqueda_cv where empresa_busqueda_cv_id='$busqueda'");
$bus mysql_fetch_array($bu);


if (
$bus[empresa_busqueda_cv_area] != "0") {
$aux1 " and preferencias_areas.preferencia_area_user=users.use r_id and preferencias_areas.preferencia_area_area='$bus[empresa_busqueda_cv_area]'"
}
if (
$bus[empresa_busqueda_cv_industria] != "0") {
$aux2 " and preferencias_industria.preferencia_industria_indus tria='$bus[empresa_busqueda_cv_industria]' and preferencias_industria.preferencia_industria_user= users.user_id"
}


$cad mysql_query("select concat(users.user_apellido,', ',users.user_nombre)as nombre, DATE_FORMAT(users.user_cumpleanos, '%d-%m-%Y')as fecha_nac, users.user_id, users.user_sexo, sexos.sexo_id, sexos.sexo_nombre, users_preferencias.user_preferencia_id, users_preferencias.user_preferencia_objetivo, preferencias_areas.preferencia_area_area, preferencias_industria.preferencia_industria_indus tria, provincias.provincia_nombre, paises.pais_nombre from users, sexos, users_preferencias, preferencias_areas, preferencias_industria, provincias, paises where users.user_activo='1' and sexos.sexo_id=users.user_sexo and users_preferencias.user_preferencia_user=users.use r_id and provincias.provincia_id=users.user_provincia and paises.pais_id=users.user_pais".$aux1.$aux2." order by users.user_apellido, users.user_nombre LIMIT $inicial, $cantidad"); 
  #3 (permalink)  
Antiguo 29/11/2005, 21:07
Avatar de jpvilar  
Fecha de Ingreso: febrero-2005
Ubicación: Buenos Aires - Argentina
Mensajes: 128
Antigüedad: 12 años, 10 meses
Puntos: 1
Gracias Seppo, funciona el filtro, lo que me sucede ahora es que me tira un booleano, me repite el mismo resultado por registro encontrado cuando filtro por uno de los parámetros (area o industria), si le paso los dos parámetros filtra perfecto, eso que tengo como clave foranea el user_id, que es lo que me interesa, que me tire un usuario por linea. Paso el código como quedó ahora:

Código PHP:
$bu mysql_query("select * from empresas_busqueda_cv where empresa_busqueda_cv_id='$busqueda'");
$bus mysql_fetch_array($bu);
if (
$bus[empresa_busqueda_cv_area] != "0") {
$aux1 " and preferencias_areas.preferencia_area_user=users.user_id and preferencias_areas.preferencia_area_area='$bus[empresa_busqueda_cv_area]'";
}
if (
$bus[empresa_busqueda_cv_industria] != "0") {
$aux2 " and preferencias_industria.preferencia_industria_industria='$bus[empresa_busqueda_cv_industria]' and preferencias_industria.preferencia_industria_user=users.user_id";
}
$cad mysql_query("select concat(users.user_apellido,', ',users.user_nombre)as nombre, DATE_FORMAT(users.user_cumpleanos, '%d-%m-%Y')as fecha_nac, users.user_id, users.user_sexo, sexos.sexo_id, sexos.sexo_nombre, users_preferencias.user_preferencia_id, users_preferencias.user_preferencia_objetivo, preferencias_areas.preferencia_area_user, preferencias_areas.preferencia_area_area, preferencias_industria.preferencia_industria_user, preferencias_industria.preferencia_industria_industria, provincias.provincia_nombre, paises.pais_nombre from users, sexos, users_preferencias, preferencias_areas, preferencias_industria, provincias, paises where users.user_activo='1' and sexos.sexo_id=users.user_sexo and users_preferencias.user_preferencia_user=users.user_id and provincias.provincia_id=users.user_provincia and paises.pais_id=users.user_pais".$aux1.$aux2." order by users.user_apellido, users.user_nombre LIMIT $inicial, $cantidad"); 
Gracias por tu ayuda ... me sirvió de mucho aunque aún me queda este "detalle" por resolver
__________________
JuanP
QUIEN NO SE EQUIVOCA NO APRENDE ...
QUIEN NO APRENDE SE EQUIVOCA ... PERO NO APRENDE
  #4 (permalink)  
Antiguo 29/11/2005, 21:23
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 12 años, 8 meses
Puntos: 17
Probá ahora... puse que no seleccione las tablas ni los campos cuando no entra al if... Espero que ande, sino le tiro la bola a otro
Código PHP:
$bu mysql_query("select * from empresas_busqueda_cv where empresa_busqueda_cv_id='$busqueda'");
$bus mysql_fetch_array($bu);

if (
$bus[empresa_busqueda_cv_area] != "0") {
$aux10 "preferencias_areas.preferencia_area_user, preferencias_areas.preferencia_area_area, ";
$aux11 "preferencias_areas, ";
$aux12 " and preferencias_areas.preferencia_area_user=users.user_id and preferencias_areas.preferencia_area_area='$bus[empresa_busqueda_cv_area]'";
}
if (
$bus[empresa_busqueda_cv_industria] != "0") {
$aux20 "preferencias_industria.preferencia_industria_user, preferencias_industria.preferencia_industria_industria, ";
$aux21 "preferencias_industria, ";
$aux22 " and preferencias_industria.preferencia_industria_industria='$bus[empresa_busqueda_cv_industria]' and preferencias_industria.preferencia_industria_user=users.user_id";
}
$cad mysql_query("select concat(users.user_apellido,', ',users.user_nombre)as nombre, DATE_FORMAT(users.user_cumpleanos, '%d-%m-%Y')as fecha_nac, users.user_id, users.user_sexo, sexos.sexo_id, sexos.sexo_nombre, users_preferencias.user_preferencia_id, users_preferencias.user_preferencia_objetivo, ".$aux10.$aux20."provincias.provincia_nombre, paises.pais_nombre FROM users, sexos, users_preferencias, ".$aux11.$aux21."provincias, paises WHERE users.user_activo='1' and sexos.sexo_id=users.user_sexo and users_preferencias.user_preferencia_user=users.user_id and provincias.provincia_id=users.user_provincia and paises.pais_id=users.user_pais".$aux12.$aux22." order by users.user_apellido, users.user_nombre LIMIT $inicial, $cantidad"); 
  #5 (permalink)  
Antiguo 29/11/2005, 21:42
Avatar de jpvilar  
Fecha de Ingreso: febrero-2005
Ubicación: Buenos Aires - Argentina
Mensajes: 128
Antigüedad: 12 años, 10 meses
Puntos: 1
De acuerdo Solucionado

Gracias Seppo ... funciona muy bien, tengo unos cuantos parámetros más que pasarle como filtros pero esto me simplifica muchisimo y, sobre todo, ordena el query.
Si se te ocurre otra manera por favor pasamela, pero realmente me salvaste, no se me había ocurrido transformar los strings directamente en variables, visto ahora parece simple pero estuve toda la tarde luchando con esto ... gracias de nuevo.
Saludos
__________________
JuanP
QUIEN NO SE EQUIVOCA NO APRENDE ...
QUIEN NO APRENDE SE EQUIVOCA ... PERO NO APRENDE
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 20:18.