Foros del Web » Programando para Internet » PHP »

Consulta a base de datos algo compleja

Estas en el tema de Consulta a base de datos algo compleja en el foro de PHP en Foros del Web. Buenas.. Tengo una consulta a una base de datos algo compleja (al menos para mi): Es una bolsa de trabajo, en la que el usuario ...
  #1 (permalink)  
Antiguo 11/01/2010, 20:33
 
Fecha de Ingreso: abril-2008
Mensajes: 67
Antigüedad: 16 años
Puntos: 0
Consulta a base de datos algo compleja

Buenas..

Tengo una consulta a una base de datos algo compleja (al menos para mi):

Es una bolsa de trabajo, en la que el usuario sube sus datos a traves de comboboxes. Por ejemplo, en el combobox de "Sexo", el usuario sube sus datos segun seleccione "Masculino" o "Femenino". Los combobox se cargan de unas bases de datos.

El problema aparece cuando se quieren mostrar los datos de curriculums. Hice un formulario para las empresas para que seleccionen a sus candidatos, a traves de comboboxes.

Hay 5 comboboxes, que cargan sus opciones de una base de datos diferente cada uno. La consulta se va a hacer hacia otras bases de datos. Hasta aqui no hay problema con la consulta, simplemente se toma el valor seleccionado del combobox, se hace la consulta mysql, etc.

El problema es que le agregue una opcion mas a los combobox: la que se usa para no tomar en cuenta ese combobox en la consulta. Por ejemplo: en el combobox de "Sexo" estan las opciones "Indistinto", "Masculino" y "Femenino": las dos ultimas son las que se cargan de la base de datos, y la primera se agrega al iniciar la pagina.

Entonces, el meollo del asunto es: como le hago para realizarla, si en la base de datos no existe la opcion "Indistinto", imaginense lo que pase cuando el usuario al momento de seleccionar su sexo salga "Indistinto"!!

Pense en hacerlo con condicionales if, pero resulta que son demasiadas combinaciones como para que sea algo practico.

Espero haberme explicado lo suficiente...

Gracias
  #2 (permalink)  
Antiguo 12/01/2010, 01:18
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Consulta a base de datos algo compleja

Me perdí un poco, pero si lo que deseas es que si la persona no seleccionó una opción de masculino y femenino, solo necesitas una condición que diga algo así
Código PHP:
Ver original
  1. <?php
  2. $r = mysql_query("SELECT * FROM tabla WHERE id = " . $id_de_la_persona) or die(mysql_error());
  3. $row = mysql_fetch_assoc($r);
  4. ?>
  5. <input type="checkbox" name="sexo" value="I" <?php echo ($row["sexo"] != "M" && $row["sexo"] != "F" ? "checked='checked'" : ""); ?> />
  6. <input type="checkbox" name="sexo" value="M" <?php echo ($row["sexo"] == "M" ? "checked='checked'" : ""); ?> />
  7. <input type="checkbox" name="sexo" value="F" <?php echo ($row["sexo"] == "F" ? "checked='checked'" : ""); ?> />
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 12/01/2010, 12:03
 
Fecha de Ingreso: abril-2008
Mensajes: 67
Antigüedad: 16 años
Puntos: 0
Respuesta: Consulta a base de datos algo compleja

Gracias por tu respuesta.

El detalle es que la consulta va despues de los comboboxes.

Mira, aqui incluyo el codigo de los comboboxes (o select):

Código PHP:
<tr>
      <td><div align="center">
        <select name="sexo" id="sexo">
            <option selected>Indistinto</option>
            <?php
do {  
?>
            <option value="<?php echo $row_sexo['sexo']?>"><?php echo $row_sexo['sexo']?></option>
            <?php
} while ($row_sexo mysql_fetch_assoc($sexo));
  
$rows mysql_num_rows($sexo);
  if(
$rows 0) {
      
mysql_data_seek($sexo0);
      
$row_sexo mysql_fetch_assoc($sexo);
  }
?>
        </select>
      </div></td>
      <td><div align="center">
        <select name="laboral" id="select2">
            <option selected>Indistinto</option>
            <?php
do {  
?>
            <option value="<?php echo $row_labor['opcion']?>"<?php if (!(strcmp($row_labor['opcion'], "Indistinto"))) {echo "SELECTED";} ?>><?php echo $row_labor['opcion']?></option>
            <?php
} while ($row_labor mysql_fetch_assoc($labor));
  
$rows mysql_num_rows($labor);
  if(
$rows 0) {
      
mysql_data_seek($labor0);
      
$row_labor mysql_fetch_assoc($labor);
  }
?>
        </select>
      </div></td>
      <td><div align="center">
        <select name="maxiest" id="select3">
            <option selected>Cualquiera</option>
            <?php
do {  
?>
            <option value="<?php echo $row_maximest['opcion']?>"><?php echo $row_maximest['opcion']?></option>
            <?php
} while ($row_maximest mysql_fetch_assoc($maximest));
  
$rows mysql_num_rows($maximest);
  if(
$rows 0) {
      
mysql_data_seek($maximest0);
      
$row_maximest mysql_fetch_assoc($maximest);
  }
?>
        </select>
      </div></td>
      <td><div align="center">
        <select name="reubic" id="select4">
            <option selected>Indistinto</option>
            <?php
do {  
?>
            <option value="<?php echo $row_reubicacion['opcion']?>"><?php echo $row_reubicacion['opcion']?></option>
            <?php
} while ($row_reubicacion mysql_fetch_assoc($reubicacion));
  
$rows mysql_num_rows($reubicacion);
  if(
$rows 0) {
      
mysql_data_seek($reubicacion0);
      
$row_reubicacion mysql_fetch_assoc($reubicacion);
  }
?>
        </select>
      </div></td>
      <td><div align="center">
        <select name="viaja" id="select5">
            <option selected>Indistinto</option>
            <?php
do {  
?>
            <option value="<?php echo $row_viaje['opcion']?>"><?php echo $row_viaje['opcion']?></option>
            <?php
} while ($row_viaje mysql_fetch_assoc($viaje));
  
$rows mysql_num_rows($viaje);
  if(
$rows 0) {
      
mysql_data_seek($viaje0);
      
$row_viaje mysql_fetch_assoc($viaje);
  }
?>
        </select>
      </div></td>
    </tr>
Despues de que la empresa selecciona las opciones que desee, es cuando se hace la consulta a las bases de datos. El problema es que cuando la empresa selecciona la opcion "Indistinto", o "Cualquiera" no se puede hacer la consulta, ya que estas opciones no existe en la base de datos.

Entonces como puedo hacerle para que se haga la consulta? Pense en usar condicionales if para que, dependiendo de las opciones seleccionadas, se enviara a una consulta diferente, pero son demasiados comboboxes (o selects) y serian demasiadas consultas diferentes.

Gracias.
  #4 (permalink)  
Antiguo 12/01/2010, 12:18
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: Consulta a base de datos algo compleja

Pues según lo que entiendo...

Indistinto se refiere a que no importa el sexo. Con lo que deduces que no necesitas hacer la consulta filtrándola por sexos.

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #5 (permalink)  
Antiguo 12/01/2010, 12:48
 
Fecha de Ingreso: abril-2008
Mensajes: 67
Antigüedad: 16 años
Puntos: 0
Gracias Carxl.

Exactamente, así seria esa consulta en especifico. Esa consulta se haría sin tomar el cuenta el select de sexo, pero si se tomarían en cuenta los otros cuatro selects.

Pero que tal que la empresa selecciona también como indistinto únicamente el tiempo laborando, o como indistinto únicamente la reubicación, o toma dos o tres opciones indistintas, o toma todas las opciones indistintas. Entonces serian muchas consultas diferentes....

Espero haberme explicado, díganme como hacer eso sin necesidad de hacer una consulta para cada caso en especifico..
Acordándome un poco de combinaciones, resulta que tendría que hacer 31 consultas diferentes para los 5 select!!!! Ayudaaa...

Última edición por GatorV; 12/01/2010 a las 16:52

Etiquetas: Ninguno
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 10:21.