Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Php - consulta

Estas en el tema de Php - consulta en el foro de PHP en Foros del Web. Hola buen dia comunidad. Tengo una duda con respecto a la performance de una aplicacion: Tengo una tabla que se llama cursos: idCursos descripcion link ...
  #1 (permalink)  
Antiguo 04/08/2015, 11:15
 
Fecha de Ingreso: octubre-2012
Mensajes: 202
Antigüedad: 12 años, 1 mes
Puntos: 0
Php - consulta

Hola buen dia comunidad. Tengo una duda con respecto a la performance de una aplicacion:

Tengo una tabla que se llama

cursos:
idCursos
descripcion
link
observaciones
puntaje
mostrar

mi consuilta capaz es para el foro de BD pero tambien para este foro, porque lo q yo necesito sabes es:
se cargan cursos que se venden a veces en mas de una provincia.
Ponele que se vende en Buenos Aires, Santa Fe y la pampa.
Entonces yo desde la aplicacion cuando voy a la galeria de Buenos Aires restringo la consulta por ID de provincia. Como podria guardar esto en la base de datos sin saber de antemano en cuantas provincias voy a vender el curso?
  #2 (permalink)  
Antiguo 04/08/2015, 11:16
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 9 meses
Puntos: 69
Respuesta: Php - consulta

Agrega un campo provincia a la tabla para que puedas filtrar la búsqueda por ese criterio. Y sí, este tema debería ir en BD no en php.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #3 (permalink)  
Antiguo 04/08/2015, 12:16
 
Fecha de Ingreso: octubre-2012
Mensajes: 202
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Php - consulta

lo puse en php porque depende lo q me contestaban iba a preguntar algo con respecto a la vista en php.

yo agrego en campo provincia..

pero como guardo mas de un dato en ese campo??

osea se vende en:

id1 Buenos Aires
id2 Santa Fe
id2 Entre Rios

como guardo los 3 datos en una sol campo?

la respuesta no seria tampoco que cree 3 campos porque yo no se de antemano en cuantas provincias se van a vender..

y desdes lapagina yo consulto por ejemplo cursos que se venden en Buenos Aires
  #4 (permalink)  
Antiguo 04/08/2015, 12:31
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 9 meses
Puntos: 69
Respuesta: Php - consulta

No sería lógico hacer lo que dices de crear 3 campos, lo lógico es que insertes un registro por cada provincia p ej:

idCursos - provincia - descripcion - link - observaciones - puntaje - mostrar
1 - Buenos Aires - Curso cocina - cursococina.com - 10 - mostrar
2 - Santa Fe - Curso cocina - cursococina.com - 10 - etc
3 - Entre Rios - Curso cocina - ...
4 - Buenos Aires - Curso php - cursophp.com - ...

Como puedes ver el mismo curso de cocina se dicta en 3 provincias diferentes y si haces un select buscando que cursos se dictan en Buenos Aires te va a dar como resultado 2 cursos (cocina y php).

Es solo un ejemplo, acomódalo a tus necesidades.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #5 (permalink)  
Antiguo 04/08/2015, 12:39
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 17 años, 1 mes
Puntos: 80
Respuesta: Php - consulta

Tienes que hacer dos tablas, una para el curso donde tienes:
idCurso
descripcion
link
observaciones
etc...

y otra que enlaza los curso con las localidades que lo daran
idCursoLocalidad
idCurso
idLocalidad

con eso puede andar.

Saludos
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #6 (permalink)  
Antiguo 04/08/2015, 12:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Php - consulta

Cita:
Iniciado por jmm87 Ver Mensaje
lo puse en php porque depende lo q me contestaban iba a preguntar algo con respecto a la vista en php.

yo agrego en campo provincia..

pero como guardo mas de un dato en ese campo??

osea se vende en:

id1 Buenos Aires
id2 Santa Fe
id2 Entre Rios

como guardo los 3 datos en una sol campo?

la respuesta no seria tampoco que cree 3 campos porque yo no se de antemano en cuantas provincias se van a vender..

y desdes lapagina yo consulto por ejemplo cursos que se venden en Buenos Aires

Eso sería un error de diseño de datos.
Si tienes N provincias, y en cada una se pueden hacer N cursos, hay una relación N:M entre provincias y cursos y eso obligatoriamente requiere una tabla adicional para administrar la relación.
Es un tema de diseño de bases de datos y está fuera del alcance de PHP. Lo deberías analizar mejor en el foro correspondiente.
De todos modos, te comento que lo que describo es la forma en que el modelo relacional lo define, y cualquier otra solución con la que intentes "parchar" el tema, y generar un campo multivaluado (prohibido en el modelo), implicará consultas de sintaxis horripilante, ineficientes, y un enorme riesgo de datos inconsistentes.
TE recomiendo analizar mejor el tema y estudiar algo de los fundamentos de las bases de datos relacionales antes de avanzar en la solución de tu proyecto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 04/08/2015, 13:07
 
Fecha de Ingreso: octubre-2012
Mensajes: 202
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Php - consulta

chronos682
Entiendo que no hay q hacer 3 campos ni la un campo por provincia.. pero sigo teniendo una duda contra tu respuesta..
Porque yo lo habia planteado de la misma manera q vos pero...

1 - Buenos Aires - Curso cocina - cursococina.com - 10 - mostrar
2 - Santa Fe - Curso cocina - cursococina.com - 10 - etc
3 - Entre Rios - Curso cocina - ...
4 - Buenos Aires - Curso php - cursophp.com

Curso de cocina lo vendo en Santa Fe y Entre Rios como muy bien diste el ejemplo..
Pero vamos a suponer q yo cuando ingreso el curso ya se que va a ser ingresado en dos provincias..

Como planteo el formulario php para que si yo selecciono que el curso se vende en mas de una provincia haga un insert diferente??

porque por lo q entiendo:
2 - Santa Fe - Curso cocina - cursococina.com - 10 - etc
3 - Entre Rios - Curso cocina - ...

son insert diferentes. A nivel de base de datos entiendo q es un registro por cada uno pero a nivel aplicacion como lo ingreso??
  #8 (permalink)  
Antiguo 04/08/2015, 13:18
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 9 meses
Puntos: 69
Respuesta: Php - consulta

Habría que mirar como tienes diseñado el formulario con el que ingresas la información o el código que utilizas para llenar la BD. No olvides que si es el usuario el que va a ingresar los datos debes crear una tabla adicional donde estén todas las provincias y luego relacionar el id de la provincia con el campo provincia de la tabla de cursos.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #9 (permalink)  
Antiguo 05/08/2015, 09:06
 
Fecha de Ingreso: octubre-2012
Mensajes: 202
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Php - consulta

Te dejo el codigo pero lo q estoy preguntando no esta previsto en el codigo porque no sabia como hacerlo. se me ocurrio poner un recuadro con las provincias y un check box por cada una. y recogerlas en un array. pero mi duda surge cuando llega a hacer la consulta..
tendria q crear una tabla provincias y a mi consulta deberia agregarle un join con la tabla provincias por su ID. pero como hago q si selecciona mas de una provincia inserte un registro para cada provincia q ingresa?
porque por el ejemplo q me das entiendo de q cada vez q un curso se vende en una provincia es un registro nuevo

Código HTML:
Ver original
  1. <?php
  2. session_start();
  3. include("conexion.php");
  4. $con=mysql_connect($host,$user,$pw) or die("Problemas con el sevidor");
  5. mysql_select_db($db,$con) or die("Problemas con base de datos");
  6.  
  7. $formatos=array('.pdf','.jpg','.doc');
  8.  
  9. if(isset($_POST['guardar'])){
  10.  
  11.     $codigo=$_POST['codigo'];
  12.     $puntaje=$_POST['puntaje'];
  13.     $descripcion=$_POST['descripcion'];
  14.     $observaciones=$_POST['observaciones'];
  15.     $publicar=$_POST['publicar'];
  16.  
  17.  
  18.     $nombreCurso = $_FILES['curso']['name'];
  19.     $nombreTmpCurso = $_FILES['curso']['tmp_name'];
  20.  
  21.     $nombreTp = $_FILES['trabajoPractico']['name'];
  22.     $nombreTmpTp = $_FILES['trabajoPractico']['tmp_name'];
  23.  
  24.     $extCurso=substr($nombreCurso, strrpos($nombreCurso, '.'));
  25.     //si deja de funcionar toque esta linea.. las variables eran las mismas de arriba
  26.     $extTp=substr($nombreTp, strrpos($nombreTmpTp, '.'));
  27.    
  28.     if(in_array($extCurso, $formatos) && in_array($extTp, $formatos)){
  29.         if(move_uploaded_file($nombreTmpCurso, "cursos/$nombreCurso")){
  30.             echo "El curso se subio con exito";
  31.         }else{
  32.             echo "El curso no se pudo subir por algun motivo";
  33.         }
  34.  
  35.         if(move_uploaded_file($nombreTmpTp, "trabajosPracticos/$nombreTp")){
  36.             echo "El trabajo practico subio con exito";
  37.         }else{
  38.             echo "El trabajo practico no se pudo subir por algun motivo";
  39.         }
  40.  
  41.     }else{
  42.         echo "Esta queriendo guardar un arhivo de extension no valida";
  43.     }
  44.     //Estaba asi y funcionaba:
  45.     //mysql_query("INSERT INTO cursos (idCurso,puntaje,descripcion,observaciones,mostrar) VALUES ('$codigo','$puntaje','$descripcion','$observaciones','$publicar');");
  46.     mysql_query("INSERT INTO cursos (idCurso,puntaje,descripcion,observaciones,mostrar) VALUES ('$codigo','$puntaje','$descripcion','$observaciones','$publicar')");
  47. }
  48.  
  49. if(isset($_SESSION['dniSession'])){
  50. ?>
  51.  
  52.    
  53. <div class="card z-depth-3 contacto-section">
  54.     <form class="col s12" action="" method="post" enctype="multipart/form-data">
  55.         <div class="card-content">
  56.             <div class="row">
  57.                 <h5>Insertar Curso</h5>            
  58.                 <div class="row">
  59.                     <div class="input-field col s6">
  60.                         <input id="codigo" name="codigo" type="text" class="validate">
  61.                         <label for="last_name">Codigo</label>
  62.                     </div>
  63.                     <div class="input-field col s6">
  64.                         <input id="puntaje" name="puntaje" type="text" class="validate">
  65.                         <label for="last_name">Puntaje</label>
  66.                     </div>
  67.                 </div>
  68.                 <div class="row">
  69.                     <div class="input-field col s6">
  70.                         <input id="descripcion" name="descripcion" type="text" class="validate">
  71.                         <label for="last_name">Descripcion</label>
  72.                     </div>
  73.                     <div class="input-field col s6">
  74.                         <input id="observaciones" name="observaciones" type="text" class="validate">
  75.                         <label for="last_name">Observaciones</label>
  76.                     </div>                         
  77.                 </div>
  78.                 <div class="row">  
  79.                     <div class="input-field col s6">
  80.                         <select name="publicar" id="publicar" class="browser-default">
  81.                             <option value="" disabled selected>Mostrar/Ocultar</option>
  82.                             <option value="1">Mostrar</option>
  83.                             <option value="0">Ocultar</option>
  84.                         </select>
  85.                     </div> 
  86.                 </div>
  87.                 <div class="row">
  88.                     <div class="input-field col s12">
  89.                         <div class="file-field input-field">
  90.                             <input class="file-path validate" type="text"/>
  91.                             <div class="btn">
  92.                                 <span>Curso</span>
  93.                                 <input type="file" name="curso"/>
  94.                             </div>
  95.                         </div>
  96.                     </div>
  97.                 </div>
  98.                 <div class="row">
  99.                     <div class="input-field col s12">
  100.                         <div class="file-field input-field">
  101.                             <input class="file-path validate" type="text"/>
  102.                             <div class="btn">
  103.                                 <span>Trabajo Practico</span>
  104.                                 <input type="file" name="trabajoPractico"/>
  105.                             </div>
  106.                         </div>
  107.                     </div> 
  108.                 </div>     
  109.                
  110.             </div>
  111.         </div>
  112.         <div class="card-action center">
  113.              <a class="btn disabled" href="" id="regresar">Regresar</a>
  114.              <button class="btn waves-effect waves-light green darken-2" type="submit" name="guardar">Guardar
  115.                 <i class="material-icons"></i>
  116.              </button>
  117.         </div>
  118.     </form>
  119. </div>
  120. <?php } ?>
  121.  
  122. <script type="text/javascript">
  123.  
  124.     $(document).ready(function(){
  125.         $('#regresar').click(function(e){
  126.             e.preventDefault();
  127.              $("#contenido").load("adminCursos.php");
  128.         });
  129.     });
  130.  
  #10 (permalink)  
Antiguo 05/08/2015, 09:10
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 9 meses
Puntos: 69
Respuesta: Php - consulta

Si lo vas a hacer con checkbox debes tener en cuenta que todos los checkbox deben tener el mismo name, en el código php que recibe la información por post vas a recibir todos los values SELECCIONADOS en un array y con un for each puedes ir recorriendo cada uno de los elementos del array y vas haciendo un insert por cada uno.

Sería algo así:

Código PHP:
Ver original
  1. <html>
  2.     <head>
  3.         <title></title>
  4.         <?php
  5.             if (isset($_POST["provincia"]))
  6.             {
  7.                 foreach ($_POST["provincia"] as $valor)
  8.                 {
  9.                     echo "INSERT en tabla VALOR PROVINCIA {$valor}<br>";
  10.                 }
  11.                 exit;
  12.             }
  13.         ?>
  14.     </head>
  15.     <body>
  16.         <form action="" method="post">
  17.             <input type="checkbox" name="provincia[]" value="1"/>Provincia 1<br>
  18.             <input type="checkbox" name="provincia[]" value="2"/>Provincia 2<br>
  19.             <input type="checkbox" name="provincia[]" value="3"/>Provincia 3<br>
  20.             <input type="checkbox" name="provincia[]" value="4"/>Provinvia 4<br>
  21.             <input type="checkbox" name="provincia[]" value="5"/>Provincia 5<br><br>
  22.             <input type="submit" name="enviar" value="Enviar" />
  23.         </form>
  24.     </body>
  25. </html>
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]

Última edición por chronos682; 05/08/2015 a las 09:24
  #11 (permalink)  
Antiguo 10/08/2015, 12:40
 
Fecha de Ingreso: octubre-2012
Mensajes: 202
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Php - consulta

Perfecto entiendo pero sigo teniendo una complicacion..
Miren esta es mi base de datos




Voy a insertar el curso, entonces recoge todos los datos del form y llega a la consulta:

mysql_query("INSERT INTO cursos (idCurso,puntaje,descripcion,observaciones,mostrar ) VALUES ('$codigo','$puntaje','$descripcion','$observacion es','$publicar')");

Inserta el curso todo perfecto..

Ahora necesito insertar en que provincias se vende el curso que seria la tabla CURSOPROVINCIA

Hago un FOR para recorrer la lista de CHECK BOX que marque ( la cantidad de povincias que marque donde se vendia el curso, que viene de un array)
y cada vez que encuentra un nuevo resultado el FOR hace una nueva insercion a la base.
La logica todo perfecto

El unico problema es que todabia no tengo el id del curso cuando quiero insertar la relacion entre el curso y la provincia.

$provComerciliza=$_POST["provComerciliza"];
$countProvincias = count($provComerciliza);

for ($i = 0; $i < $countProvincias; $i++) {
mysql_query("INSERT INTO cursosprovincia(idCurso,idProvincia) values ('' '$idCursoNoLoConzco','$i' ");
}
  #12 (permalink)  
Antiguo 10/08/2015, 13:03
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 9 meses
Puntos: 69
Respuesta: Php - consulta

Primero no se ve la imagen que adjuntaste. Segundo, asumo que el campo idCurso no lo tienes definido como autonumérico porque al hacer el INSERT estás especificando el valor del campo idCurso, por lo tanto asumo que en la variable $codigo tienes el ID del curso, entonces lo que tienes que poner en el segundo INSERT es esa variable:

Código PHP:
Ver original
  1. mysql_query("INSERT INTO cursosprovincia(idCurso,idProvincia) values ('$codigo','$i')";
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #13 (permalink)  
Antiguo 10/08/2015, 13:23
 
Fecha de Ingreso: octubre-2012
Mensajes: 202
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Php - consulta

a ver.. lo solucione asi..

Código MySQL:
Ver original
  1. mysql_query("INSERT INTO cursos (idCurso,puntaje,descripcion,observaciones,mostrar) VALUES ('$codigo','$puntaje','$descripcion','$observaciones','$publicar')");
  2.  
  3. $idUltimoCurso = mysql_query("SELECT * FROM 'cursos' ORDER BY 'idCursos' DESC LIMIT 1");
  4.    
  5. $provComerciliza=$_POST["provComerciliza"];
  6. $countProvincias = count($provComerciliza);
  7.    
  8. for ($i = 0; $i < $countProvincias; $i++) {
  9.       mysql_query("INSERT INTO cursosprovincia(idCurso,idProvincia) values  ('$idUltimoCurso','$i')");
  10.  }

Yo encuentro la manera de resolverlo solo pero no se si es lo habituable hacer. por eso pregunto
  #14 (permalink)  
Antiguo 10/08/2015, 13:25
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 9 meses
Puntos: 69
Respuesta: Php - consulta

No creo que así funcione porque la función mysql_query devuelve 0 o 1 según si se realizó con éxito o no. No sé por qué no tomas en cuenta lo que te escribo.

PD: Intenta agregar varios registros y miras en la tabla de provincias como te quedó el id del curso y nos cuentas.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #15 (permalink)  
Antiguo 11/08/2015, 08:00
 
Fecha de Ingreso: octubre-2012
Mensajes: 202
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Php - consulta

Solucionado!

Me marie solo. Tenes razon. Asi quedo funcionando...

Código PHP:

$formatos
=array('.pdf','.jpg','.doc');


if(isset(
$_POST['guardar'])){

    
$codigo=$_POST['codigo']; 
    
$puntaje=$_POST['puntaje'];
    
$descripcion=$_POST['descripcion'];
    
$observaciones=$_POST['observaciones'];
    
$publicar=$_POST['publicar'];


    
$nombreCurso $_FILES['curso']['name'];
    
$nombreTmpCurso $_FILES['curso']['tmp_name'];

    
$nombreTp $_FILES['trabajoPractico']['name'];
    
$nombreTmpTp $_FILES['trabajoPractico']['tmp_name'];

    
$extCurso=substr($nombreCursostrrpos($nombreCurso'.'));
    
$extTp=substr($nombreTpstrrpos($nombreTp'.'));
    
    if(
in_array($extCurso$formatos) && in_array($extTp$formatos)){
        if(
move_uploaded_file($nombreTmpCurso"cursos/$nombreCurso")){
            echo 
"El curso se subio con exito";    
        }else{
            echo 
"El curso no se pudo subir por algun motivo";
        }

        if(
move_uploaded_file($nombreTmpTp"trabajosPracticos/$nombreTp")){
            echo 
"El trabajo practico subio con exito";
        }else{
            echo 
"El trabajo practico no se pudo subir por algun motivo";
        }

    }else{
        echo 
"Esta queriendo guardar un arhivo de extension no valida";
    }

    if(isset(
$_POST['codigo']) && !empty($_POST['codigo'])){
        if(isset(
$_POST['descripcion']) && !empty($_POST['descripcion'])){
            
mysql_query("INSERT INTO cursos (idCurso,puntaje,descripcion,observaciones,mostrar) VALUES ('$codigo','$puntaje','$descripcion','$observaciones','$publicar');");
            
            
$provComercializa=$_POST["provComercializa"];
            
$countProvincias count($provComercializa);
            
            for (
$i 0$i $countProvincias$i++){
                
mysql_query("INSERT INTO cursoprovincia(idCurso,idProvincia) values ('$codigo','$i')");

            }
        }
    }

Muchas gracias!
  #16 (permalink)  
Antiguo 11/08/2015, 08:20
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 9 meses
Puntos: 69
Respuesta: Php - consulta

Una observación si colocas la variable $i para ingresar el idProvincia no te va a funcionar, porque lo que necesitas es insertar el value del checkbox seleccionado no el índice que ocupa dentro del array y sería mejor si usaras un for each:

Código PHP:
Ver original
  1. if(isset($_POST['codigo']) && !empty($_POST['codigo'])){
  2.     if(isset($_POST['descripcion']) && !empty($_POST['descripcion'])){
  3.         mysql_query("INSERT INTO cursos (idCurso,puntaje,descripcion,observaciones,mostrar) VALUES ('$codigo','$puntaje','$descripcion','$observaciones','$publicar');");
  4.          
  5.         foreach($_POST['provComercializa'] as $provincia)
  6.         {
  7.             mysql_query("INSERT INTO cursoprovincia(idCurso,idProvincia) values ('$codigo','$provincia')");
  8.         }
  9.     }
  10. }


Agrego: No olvides que los checkbox de las provincias deben tener en value un identificador único.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]

Etiquetas: tabla
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 12:51.