Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Duda en Select Multiple: Consulta a 2 tablas PHP MYSQL

Estas en el tema de Duda en Select Multiple: Consulta a 2 tablas PHP MYSQL en el foro de PHP en Foros del Web. Muy buenos días amigos, esta es mi primera duda, espero puedan ayudarme... Estoy realizando una página de administración de Ofertas de trabajo donde inserto, muestro, ...
  #1 (permalink)  
Antiguo 19/10/2015, 13:59
 
Fecha de Ingreso: octubre-2015
Ubicación: México DF
Mensajes: 5
Antigüedad: 8 años, 5 meses
Puntos: 0
Exclamación Duda en Select Multiple: Consulta a 2 tablas PHP MYSQL



Muy buenos días amigos, esta es mi primera duda, espero puedan ayudarme...

Estoy realizando una página de administración de Ofertas de trabajo donde inserto, muestro, actualizo y elimino registros en una base de datos desde un formulario.

En el formulario donde inserto tengo una etiqueta Select con atributo multiple, éste se inserta correctamente como un array en la bd, y me muestra los datos de dicho array.
Ahora bien, mi duda se presenta a la hora de la actualización del registro, en el formulario de actualización aparecen los datos del registro, pero en mi select option multiple quiero que aparezcan todas las carreras que tengo en la bd (cosa que no hace), pero quiero que aparezcan seleccionadas las que son de esa oferta (eso es lo que hace el código a continuación), es decir, si tengo 5 carreras para esa oferta de trabajo, en el select multiple quiero que aparezcan todas las carreras de la bd, y a su vez, que las 5 carreras de esa oferta aparezcan seleccionadas.
Los datos del registro sí se actualizan excepto las carreras.

Agredezco de antemano su ayuda. Saludos.


Código PHP:
<div class="control-group">
        <label class="control-label" >Carrera</label>
        <div class="controls">
                                                    
        <?php                
            $consulta 
"SELECT  * FROM oportunidadesXcarrera  
                    JOIN carreras ON idCarrera = carrera_idCarrera
                    WHERE  oportunidades_id_op ="
.$result["id_op"];
                        
            
$resultado mysql_query($consulta$conn);
                                                        
                                                        
        
?>    
                                                    
<select required class="form-control" style="width:400px;" multiple name="carrera[]">
    <?php
while($fila=mysql_fetch_array($resultado))             
{
?>                                                        
<option selected value="<?php echo $fila['idCarrera'];?>">
                            <?php echo $fila['nombreCarrera']; ?>
</option>

<?php
}
                                                        
?>
</select>
</div>
</div>

Última edición por DArChAvi; 19/10/2015 a las 14:05
  #2 (permalink)  
Antiguo 21/10/2015, 06:47
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 6 meses
Puntos: 214
Respuesta: Duda en Select Multiple: Consulta a 2 tablas PHP MYSQL

<saludo>
Pues teniendo en cuenta lo que se quiere lograr, hay algunas cosas a cambiar.
1. La consulta que se hace actualmente, al hacer JOIN entre
las tablas de carreras y oportunidadesXcarrera, solo traerá
las carreras que se han seleccionado al momento de ingresar el registro.
Solución? Dividir las consultas.
Es decir, la primera consulta a realizar sería solo a la tabla carreras,
y que el select dibuje todas estas.
A su vez, en ese ciclo, hacer la consulta del JOIN, y como ya se tiene
el idCarrera producto de la consulta inicial, se puede sumar a la segunda
consulta, es decir, algo así:
Código PHP:
$consulta2 "SELECT  * FROM oportunidadesXcarrera  
        WHERE  oportunidades_id_op ="
.$result["id_op"]. " AND carrera_idCarrera = ".$fila["idCarrera"]; 
2. En este punto, ya sabremos sí la carrera que se está dibujando actualmente
tiene registro en la tabla oportunidadesXcarrera con el id_op y el carrera_idCarrera.
3. Producto del punto 2, podemos hacer la comparación entre $fila y $fila2,
y preguntar sí son iguales, y si lo son, entonces seleccione la opción
que esta dibujando en ese momento, algo así:
Código PHP:
<option value="<?php echo $fila['idCarrera'];?><?php if( $fila2['carrera_idCarrera'] == $fila['idCarrera'] ) echo 'selected'?> >
                            <?php echo $fila['nombreCarrera']; ?>
</option>
</saludo>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 21/10/2015, 10:50
 
Fecha de Ingreso: octubre-2015
Ubicación: México DF
Mensajes: 5
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Duda en Select Multiple: Consulta a 2 tablas PHP MYSQL

Cita:
Iniciado por mortiprogramador Ver Mensaje
<saludo>
Pues teniendo en cuenta lo que se quiere lograr, hay algunas cosas a cambiar.
1. La consulta que se hace actualmente, al hacer JOIN entre
las tablas de carreras y oportunidadesXcarrera, solo traerá
las carreras que se han seleccionado al momento de ingresar el registro.
Solución? Dividir las consultas.
Es decir, la primera consulta a realizar sería solo a la tabla carreras,
y que el select dibuje todas estas.
A su vez, en ese ciclo, hacer la consulta del JOIN, y como ya se tiene
el idCarrera producto de la consulta inicial, se puede sumar a la segunda
consulta, es decir, algo así:
Código PHP:
$consulta2 "SELECT  * FROM oportunidadesXcarrera  
        WHERE  oportunidades_id_op ="
.$result["id_op"]. " AND carrera_idCarrera = ".$fila["idCarrera"]; 
2. En este punto, ya sabremos sí la carrera que se está dibujando actualmente
tiene registro en la tabla oportunidadesXcarrera con el id_op y el carrera_idCarrera.
3. Producto del punto 2, podemos hacer la comparación entre $fila y $fila2,
y preguntar sí son iguales, y si lo son, entonces seleccione la opción
que esta dibujando en ese momento, algo así:
Código PHP:
<option value="<?php echo $fila['idCarrera'];?><?php if( $fila2['carrera_idCarrera'] == $fila['idCarrera'] ) echo 'selected'?> >
                            <?php echo $fila['nombreCarrera']; ?>
</option>
</saludo>

Muchas gracias por tu respuesta, seguro me servirá de mucho!

Según te entiendo sería algo parecido a esto, no?
Porque también tengo que recorrer la segunda consulta, pero al hacerlo sigue saliendo lo mismo.
Creo que también debo mejorar mucho mi lógica de programación.
Saludos.

Código PHP:
    $consulta = "SELECT * FROM carreras";
    $resultado = mysql_query($consulta, $conn);
    ?>

<select required class="form-control" style="width:400px;" multiple name="carrera[]">

<?php
while($fila=mysql_fetch_array($resultado))             
{

          
$consulta2 "SELECT  * FROM oportunidadesXcarrera 
          WHERE oportunidades_id_op ="
.$result["id_op"]. " AND carrera_idCarrera 
          = "
.$fila["idCarrera"];  
                                                                
          
$resultado2 mysql_query($consulta2$conn);
                                                              
          while(
$fila2 mysql_fetch_array($resultado2))
          {             
           
?>                                                        
                                                             
           <option value="<?php echo $fila['idCarrera'];?><?php if( 
           
$fila2['carrera_idCarrera'] == $fila['idCarrera'] ) echo 'selected'?>>
            <?php echo $fila['nombreCarrera']; ?>
                                                             
           </option>

           <?php
            
}
}

?>
</select>
  #4 (permalink)  
Antiguo 21/10/2015, 10:58
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 6 meses
Puntos: 214
Respuesta: Duda en Select Multiple: Consulta a 2 tablas PHP MYSQL

<saludo>
Pues ya está!
Solo un detalle, como en la segunda consulta ya se está haciendo el filtro
para que solo traiga un registro (si existe),
no hay necesidad de hacer un while, simplemente basta con
Código PHP:
$fila2 mysql_fetch_array($resultado2); 
Y con eso, ya debe funcionar como se pretende.

</saludo>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 21/10/2015, 11:54
 
Fecha de Ingreso: octubre-2015
Ubicación: México DF
Mensajes: 5
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Duda en Select Multiple: Consulta a 2 tablas PHP MYSQL

Cita:
Iniciado por mortiprogramador Ver Mensaje
<saludo>
Pues ya está!
Solo un detalle, como en la segunda consulta ya se está haciendo el filtro
para que solo traiga un registro (si existe),
no hay necesidad de hacer un while, simplemente basta con
Código PHP:
$fila2 mysql_fetch_array($resultado2); 
Y con eso, ya debe funcionar como se pretende.

</saludo>
Perfecto, ya quedó!
Muchas gracias!

Ahora bien, la otra duda que tenía era que cuando le doy en guardar se actualizan todos los campos excepto el de carrera, mi codigo de update:

Código PHP:
$oportunidad $_POST['oportunidad'];
    
$descripcion $_POST['descripcion'];
    
$carrera $_POST['carrera'];
    
$ubicacion $_POST['ubicacion'];
    
$id_op $_POST['id_op'];
    
    
$sql "UPDATE oportunidades
            SET oportunidad = '$oportunidad', 
                descripcion = '$descripcion', 
                        carrera = '$carrera',
                ubicacion = '$ubicacion'
            WHERE id_op = $id_op "

Supongo que ese update también se debe hacer con oportunidadesXcarrera, pero no tengo bien claro cómo implementarlo.
  #6 (permalink)  
Antiguo 21/10/2015, 13:03
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 6 meses
Puntos: 214
Respuesta: Duda en Select Multiple: Consulta a 2 tablas PHP MYSQL

<saludo>

Cita:
Iniciado por DArChAvi Ver Mensaje
Perfecto, ya quedó!
Muchas gracias!
De nada

Ahora bien, la otra duda que tenía era que cuando le doy en guardar se actualizan todos los campos excepto el de carrera, mi codigo de update:

Código PHP:
$oportunidad $_POST['oportunidad'];
    
$descripcion $_POST['descripcion'];
    
$carrera $_POST['carrera'];
    
$ubicacion $_POST['ubicacion'];
    
$id_op $_POST['id_op'];
    
    
$sql "UPDATE oportunidades
            SET oportunidad = '$oportunidad', 
                descripcion = '$descripcion', 
                        carrera = '$carrera',
                ubicacion = '$ubicacion'
            WHERE id_op = $id_op "

Supongo que ese update también se debe hacer con oportunidadesXcarrera, pero no tengo bien claro cómo implementarlo.
A ver, esta ya es una tercera tabla, en donde veo solo un campo para la carrera, es decir, que cuando se edita a la final solo queda una carrera?

Sí no es así, y la persona puede tener oportunidades en varias carreras,
pues lo mejor sería, como bien supones, seguir trabajando con
oportunidadesXcarrera.

Ahora, como hacerlo?
Pues hay varios modos, pero antes de eso, una pregunta.

Hay trascendencia en el tiempo? Es decir, por ej:
El lunes yo elegí 3 carreras, luego el martes editè y solo deje 2.
Esto muere ahì? O puedo seguir 'jugando' con las oportunidades?
Y se hace necesaria una trazabilidad para saber cuando agregue n carreras,
cuando las eliminè, cuando volvì a agregar la misma, etc....

Sí la respuesta es afirmativa, hay màs vueltas para hacer.

Sí la respuesta es negativa, entonces lo que yo harìa es eliminar los
registros que ya no necesite de la tabla de

oportunidadesXcarrera, y así, al editar, solo vería seleccionadas las que
dejé finalmente, y sí vuelvo a agregar, o quitar alguna, esta info
siempre se verà reflejada en el listado ya que la consulta hacia la bd
ya se encarga de esto.

Siguiendo con el ej negativo, y teniendo en cuenta que es un select multiple,
y que me llegan solo los values seleccionados al momento del submit,
lo que yo harìa es tomar esos values, y hacerlos un string.

Ej:
Código PHP:
$variableselect = array(1,2,3);
for(
$i 0$i sizeof($array); $i++)
    
$ids .= $variableselect [$i].',';
    
    echo 
'ids es '.substr($s,0,strlen($ids)-1); 
Hasta aquí, tengo los ids que el usuario seleccionó.
Ahora solo queda hacer un query para eliminar los registros de la tabla

oportunidadesXcarrera que sean de la oportunidad que se està editando
y cuyos ids de carrera sean diferentes a los que estàn en la variable $ids.

Para eso, teniendo en $ids los válidos, se puede hacer uso de la cláusula NOT IN.

</saludo>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #7 (permalink)  
Antiguo 21/10/2015, 13:31
 
Fecha de Ingreso: octubre-2015
Ubicación: México DF
Mensajes: 5
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Duda en Select Multiple: Consulta a 2 tablas PHP MYSQL

Cita:
Iniciado por mortiprogramador Ver Mensaje
<saludo>



A ver, esta ya es una tercera tabla, en donde veo solo un campo para la carrera, es decir, que cuando se edita a la final solo queda una carrera?

Sí no es así, y la persona puede tener oportunidades en varias carreras,
pues lo mejor sería, como bien supones, seguir trabajando con
oportunidadesXcarrera.

Ahora, como hacerlo?
Pues hay varios modos, pero antes de eso, una pregunta.

Hay trascendencia en el tiempo? Es decir, por ej:
El lunes yo elegí 3 carreras, luego el martes editè y solo deje 2.
Esto muere ahì? O puedo seguir 'jugando' con las oportunidades?
Y se hace necesaria una trazabilidad para saber cuando agregue n carreras,
cuando las eliminè, cuando volvì a agregar la misma, etc....

Sí la respuesta es afirmativa, hay màs vueltas para hacer.

Sí la respuesta es negativa, entonces lo que yo harìa es eliminar los
registros que ya no necesite de la tabla de

oportunidadesXcarrera, y así, al editar, solo vería seleccionadas las que
dejé finalmente, y sí vuelvo a agregar, o quitar alguna, esta info
siempre se verà reflejada en el listado ya que la consulta hacia la bd
ya se encarga de esto.

Siguiendo con el ej negativo, y teniendo en cuenta que es un select multiple,
y que me llegan solo los values seleccionados al momento del submit,
lo que yo harìa es tomar esos values, y hacerlos un string.

Ej:
Código PHP:
$variableselect = array(1,2,3);
for(
$i 0$i sizeof($array); $i++)
    
$ids .= $variableselect [$i].',';
    
    echo 
'ids es '.substr($s,0,strlen($ids)-1); 
Hasta aquí, tengo los ids que el usuario seleccionó.
Ahora solo queda hacer un query para eliminar los registros de la tabla

oportunidadesXcarrera que sean de la oportunidad que se està editando
y cuyos ids de carrera sean diferentes a los que estàn en la variable $ids.

Para eso, teniendo en $ids los válidos, se puede hacer uso de la cláusula NOT IN.

</saludo>
Tal vez no me explique muy bien, por ejemplo:
Tengo 3 tablas: oportunidades, carrera y la transitiva que se forma de éstas (oportunidadesXcarrera).

Voy a actualizar una oportunidad que tiene seleccionadas 5 carreras, y quiero que al final solo sean 3 las que queden seleccionadas, es decir, que se eliminen del registro las 2 carreras a las que le quité la selección, para que al presionar submit sólo aparezcan 3 seleccionadas en lugar de 5, como era anteriormente.
  #8 (permalink)  
Antiguo 21/10/2015, 14:03
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 6 meses
Puntos: 214
Respuesta: Duda en Select Multiple: Consulta a 2 tablas PHP MYSQL

Cita:
Iniciado por DArChAvi Ver Mensaje
Tal vez no me explique muy bien, por ejemplo:
Tengo 3 tablas: oportunidades, carrera y la transitiva que se forma de éstas (oportunidadesXcarrera).

Voy a actualizar una oportunidad que tiene seleccionadas 5 carreras, y quiero que al final solo sean 3 las que queden seleccionadas, es decir, que se eliminen del registro las 2 carreras a las que le quité la selección, para que al presionar submit sólo aparezcan 3 seleccionadas en lugar de 5, como era anteriormente.
<saludo>
En ese caso, el ejemplo que te dí debe funcionar a la perfección.
Implementalo y nos cuentas.
</saludo>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Etiquetas: mysql+php
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 01:21.