Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Crear una consulta SQL a partir de un array php

Estas en el tema de Crear una consulta SQL a partir de un array php en el foro de PHP en Foros del Web. Buenas... tengo una consulta SQL, pero necesito traducirla a factores de PHP como un array... es decir... tengo una SESSION creada de la cual pueden ...
  #1 (permalink)  
Antiguo 08/12/2015, 15:12
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 16 años, 1 mes
Puntos: 175
Crear una consulta SQL a partir de un array php

Buenas... tengo una consulta SQL, pero necesito traducirla a factores de PHP como un array... es decir... tengo una SESSION creada de la cual pueden haber 1, 2, 3 y hasta 5 elementos --> $_SESSION['materias'][] ... los valores de esta sesion necesito introducir dentro de una consulta MYSQL como:

Código MySQL:
Ver original
  1. SELECT id_material,material,
  2. FROM plan_diario
  3. WHERE (id_materia = 4 or id_materia = 5 or id_materia = 8) and curso =2 and id_ciclo = 1

En donde el <<WHERE (id_materia = 4 OR id_materia = 5 OR id_materia = 8) >> es donde deberían venir a parar los resultados del array de sesion...

Con un bucle FOR podría lograrlo, pero si se dan cuenta debo incluirle las condicionales OR si es que hay más de 1 resultado... y eso es lo que no estoy logrando resolver y necesito una mano...

Esta es una posibilidad que trate de realizar, pero no se como poner los OR... ya que, si la session solo trae 1 elemento, no hay problema, pero si trae 2 o más, ya necesito una condicional OR dentro del SQL.. en el ejemplo puse el OR dentro del bucle FOR, pero no funcionaría bien por lo siguiente:

Código PHP:
<?php
$sql 
"SELECT id_material,material, 
                FROM plan_diario
                WHERE ("
;
                
    if(
count($_SESSION['materias']) > 1){

        for(
$i=0;$i<count($_SESSION['materias']);$i++){
//esta es la linea del problema al colocar el OR
            
$sql +="id_materia = ".$_SESSION['materias'][$i]." OR";
        }

    }else{

        for(
$i=0;$i<count($_SESSION['materias']);$i++){
            
$sql +="id_materia = ".$_SESSION['materias'][$i];
        }

    }
    
       
$sql += ") AND curso =2 AND id_ciclo = 1";
?>
Si hay un solo resultado no tendría problemas.

Si hay más de un resultados tendría algo como
id_materia = 4 or id_materia = 6 or --> de nuevo el OR quedaría flotando..

y es eso lo que no puedo resolver
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...

Última edición por loncho_rojas; 08/12/2015 a las 21:21
  #2 (permalink)  
Antiguo 08/12/2015, 18:23
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Crear una consulta SQL a partir de un array php

1. El operador de concatenación es .= y no +=
2. Es más simple si ya tienes el array y usas join() junto a IN()
Código PHP:
Ver original
  1. $x = [1, 3, 5];
  2. $q = join(', ', $x);
  3. $q = "WHERE columna IN($q)"; // WHERE columna IN(1, 3, 5)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 08/12/2015, 21:17
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 16 años, 1 mes
Puntos: 175
Respuesta: Crear una consulta SQL a partir de un array php

Muchas gracias.. lo resolvi de una manera menos ortodoxa, y tambien me funciono como me indicaste... comparto mis scripts.. gracias Pateke, un capo como siempre.

OPCION 1
Código PHP:
<?php

// consulta estandar
$sql "SELECT idmaterial,material 
            FROM plan_diario
            WHERE "
;
if(
count($_SESSION['materias']) > 1){

            
$q join(', '$_SESSION['idmateria']);
            
$sql .= "idmateria IN(".$q.")";
            
        }else{
            
            
$sql .="idmateria = ".$_SESSION['idmateria'][0];
        }
        
$sql .= " AND idcurso = ".$_SESSION['k_idcurso']." AND idciclo = ".$_SESSION['k_idciclo'];

?>
OPCION 2

Código PHP:
<?php

// consulta estandar
$sql "SELECT idmaterial,material 
            FROM plan_diario
            WHERE "
;

//alternativa que tambien funciona
        
$sql .= "(";
        
        if(
count($_SESSION['materias']) > 1){
            
            
$sql .="idmateria = ".$_SESSION['idmateria'][0];
            
            for(
$i=1;$i<count($_SESSION['materias']);$i++){
                
$sql .=" OR idmateria = ".$_SESSION['idmateria'][$i];
            }
            
        }else{
            
            
$sql .="idmateria = ".$_SESSION['idmateria'][0];
        }
        
$sql .= ") AND idcurso = ".$_SESSION['k_idcurso']." AND idciclo = ".$_SESSION['k_idciclo'];

?>
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...

Etiquetas: mysql, select, sql
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 14:09.