Comunidad de diseño web y desarrollo en internet online

Juntar varios resultados en una variable

Citar            
MensajeEscrito el 21 Abr 2008 01:08 am
Buenas!
Mi problema es el siguiente, tengo una consulta a una DB, que me devuelve los datos de una Escuela y los muestro en una página, con la fachada del Colegio y que se yo... Hasta ahí todo bien...

Pero el problema aparece con los Planes de Estudios, Idiomas y Turnos, ya que cada Establecimiento tiene varios, por lo que creé una tabla separada para cada uno de ellos: establecimientos2planes, establecimientos2idiomas y establecimientos2turnos respectivamente.

Tomando como ejemplo establecimientos2planes (las otras 2 son similares) tengo: id_est (que coincide con el ID único del Establecimiento) y id_plan (que coincide con el ID único del Plan) con lo que, en el primer Colegio me quedaría:

id_est | id_plan
1 | 1
1 | 6
1 | 7
1 10

(Porque el Establecimiento 1 tiene 4 Planes de Estudio diferentes)

Entonces el siguiente código, me genera la página de detalles:

Código :

<?php

include("config.php");

        $id = $_GET['id'];

        $result = mysql_query("SELECT
               establecimientos.id, 
               establecimientos.cue, 
               establecimientos.de, 
               establecimientos.tipo, 
               establecimientos.numero, 
               establecimientos.nombre, 
               establecimientos.direccion, 
               establecimientos.idbarrio, 
               establecimientos.colectivos, 
               establecimientos.subtes, 
               establecimientos.tel1, 
               establecimientos.tel2, 
               establecimientos.mail, 
               establecimientos.especialidad, 
               establecimientos.p13, 
               establecimientos.reingreso, 
               establecimientos.manana, 
               establecimientos.tarde, 
               establecimientos.vespertino, 
               establecimientos.noche, 
               establecimientos.ingles, 
               establecimientos.frances, 
               establecimientos.italiano, 
               establecimientos.portugues, 
               establecimientos.idjunta, 
               establecimientos.cgp, 
               establecimientos.autoridad, 
               establecimientos.idsede, 
               
               DATE_FORMAT(establecimientos.fecha,'%d') AS dia, 
               DATE_FORMAT(establecimientos.fecha,'%W') AS diasemana, 
               DATE_FORMAT(establecimientos.fecha,'%M') AS mesanio, 
               DATE_FORMAT(establecimientos.fecha,'%Y') AS anio, 
               DATE_FORMAT(establecimientos.fecha,'%T') AS hora, 
               
               tipos.tipo, 

                                   barrios.barrio, 

                                   planes.plan, 

               idiomas.idioma, 

               turnos.turno, 

               sedes.region, 

               juntas.junta 

            FROM 
                 establecimientos 

            LEFT JOIN tipos ON establecimientos.tipo = tipos.id 

            LEFT JOIN barrios ON establecimientos.idbarrio = barrios.id 

            LEFT JOIN establecimientos2planes ON establecimientos.id = establecimientos2planes.id_est 
            LEFT JOIN planes ON establecimientos2planes.id_plan = planes.id 

            LEFT JOIN sedes ON establecimientos.idsede = sedes.id 

            LEFT JOIN establecimientos2idiomas ON establecimientos.id = establecimientos2idiomas.id_est 
            LEFT JOIN idiomas ON establecimientos2idiomas.id_idioma = idiomas.id 

            LEFT JOIN establecimientos2turnos ON establecimientos.id = establecimientos2turnos.id_est 
            LEFT JOIN turnos ON establecimientos2turnos.id_turno = turnos.id 

            LEFT JOIN juntas ON establecimientos.idjunta = juntas.id 

            WHERE 
               establecimientos.id = '$id'",$connect);

        while($myrow = mysql_fetch_assoc($result))

      {
      
?>

   <?php include('global_variables.php'); ?>

<?php
      $tipo = $_GET['tipo'];
      

                     echo "<html>
                 <head>
               <title>".$myrow['tipo']." N° $numero DE $de - $nombre</title>
               <link href=\"css/dem.css\" rel=\"stylesheet\" type=\"text/css\" media=\"screen\" />
            </head>
            <body>
                <div id=\"contenedor\">
               <div id=\"titulo\">
                  <h1>
                     ".$myrow['tipo']." N° $numero DE $de<br />
                     &quot;$nombre&quot;
                  </h1>
               </div>
               
               <div id=\"izquierdo\">
                   <img src=\"imagenes/fachadas/establecimientos/$de/$id.jpg\" title=\"".$myrow['tipo']." N° $numero - $nombre\" alt=\"".$myrow['tipo']." N° $numero - $nombre\" class=\"fachadaimg\" target=\"blank\" />
                   <h2>Fotografía del Establecimiento</h2>
               </div>
               
               <div id=\"derecho\">
                  <ul>
                    <li>
                      <h2 class=\"centrado\">
                        $direccion - ".$myrow['barrio']."
                      </h2>
                    </li>
                    
                    <li>
                      <h3>
                        Teléfono/s:<br />
                          <div class=\"sangria\">
                            $tel1 $tel2
                     </div>
                      </h3>
                      <h3>
                        Mail:<br />
                          <div class=\"sangria\">
                       <a href=\"mailto:$mail\">$mail</a>
                     </div>
                      </h3>
                    </li>
                    
                    <li>
                      <strong>Transporte:</strong><br />
                        <div class=\"sangria\">
                          <strong>Colectivos:</strong> $colectivos<br />
                     <strong>Subtes:</strong> $subtes
                             </div>
                    </li>
                    
                    <li>
                    <strong>Código Único de Establecimiento (CUE):</strong><br />
                      <div class=\"sangria\">
                        $cue
                      </div>
                    </li>
                    
                    <li>
                      <strong>Especialidades/Orientaciones:</strong><br />
                      <div class=\"sangria\">
                        - ".$myrow['plan']." <strong>".$proyecto13[$p13]."</strong>
                      </div>
                    </li>
                    
                    <li>
                      <strong>Turnos:</strong><br />
                        <div class=\"sangria\">
                          - ".$myrow['turno']."
                        </div>
                    </li>
                    
                    <li>
                      <strong>Idiomas:</strong><br />
                        <div class=\"sangria\">
                        - ".$myrow['idioma']."
                        </div>
                    </li>
                    
                    <li>
                      <strong>Autoridad:</strong><br />
                        <div class=\"sangria\">
                          $autoridad
                        </div>
                    </li>
                    
                    <br />
                    <br />
                    
                    <li>
                      <div class=\"centrado\">
                        <strong>Sede:</strong> <a href=\"detalles_sede.php?=".$myrow['sedeid']."\">".$myrow['region']."</a> - ".$myrow['junta']." - <strong>CGP:</strong> $cgp
                      </div>
                    </li>
                  </ul>
               </div>
      <div class=\"alinear_der\"><em>Última Actualización realizada el día ".$dias[$myrow['diasemana']]." ".$myrow['dia']." de ".$mes[$myrow['mesanio']]." de ".$myrow['anio']." - ".$myrow['hora']."</em></div>
      <div id=\"limpiar\"><a href=\"javascript:self.history.back();\"><-- Volver al Listado</a></div>
               </div>
            </body>
             </html>";

                     echo "<br><br>";

             }

?>


El problema es, que como cada Escuela tiene varios resultados en Planes, Turnos e Idiomas; la página de detalles no me aparece 1 sola vez, sino que me aparece repetida tantas veces como "planesXidiomasXturnos", o sea que una Escuela con 4 Planes, 4 Idiomas y 4 turnos, me aparece unas 64 veces...

Existe alguna manera de "juntar" todas los resultados de planes en una sola variable (por ej $planes) para poder llamarla desde la plantilla de detalles?


Gracias!!!

Por ClickyMouse

52 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Abr 2008 09:57 am
Si todos los items no son iguales (es decir, planes, horarios, idiomas, etc deben ser la misma cantidad) un join de una sola tacada te trae filas repetidas. Puedes usar group by para reducir la cantidad, pero lo mas seguro es hacer consultas distintas para cada relación uno a muchos

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Abr 2008 10:00 am
Vos decís tener una consulta MySQL separada para cada uno de esos ítems?

Por ClickyMouse

52 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Abr 2008 10:20 am
Para evitar filas repetidas cuando el resultado no es homogéneo. Por ejemplo si tienes 10 planes y dos idiomas, en un solo join the saldrán 8 idiomas repetidos (o null, depende como hagas la consulta) Trabajosamente se puede no mostrar los repetidos a partir de manipular el resultado.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Abr 2008 10:20 am
Gracias!
Voy a probarlo en el transcurso del día y cualquier cosa les cuento...

Saludos!

Por ClickyMouse

52 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Abr 2008 12:00 pm
Puse esto al inicio de la consulta que mostré antes, para ver si lograba hacerlo:

Código :

$consulta_planes = mysql_query("SELECT
                     establecimientos.id, 

                  planes.plan 

               FROM 
                  establecimientos 

               LEFT JOIN establecimientos2planes ON establecimientos.id = establecimientos2planes.id_est 
               LEFT JOIN planes ON establecimientos2planes.id_plan = planes.id 

               WHERE 
                  establecimientos.id = '$id'",$connect);
   
      while($planes = mysql_fetch_assoc($consulta_planes))

      {
         echo $planes;
         
      }


Ya arriba de todo de la página de detalles me aparece: "ArrayArrayArrayArray" (Esta Escuela tiene 4 Planes diferentes, cada palabra Array corresponde a un plan), cómo hago para pasarlo al nombre del plan?

Gracias!!

Por ClickyMouse

52 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Abr 2008 12:53 pm
while($planes = mysql_fetch_array($consulta_planes))

{
echo $planes['plan'];

}

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Abr 2008 05:37 pm

Código :

      while($planes = mysql_fetch_assoc($consulta_planes))

      {
         $todoslosplanes = "- ".$planes['plan']."<br />";
         echo $todoslosplanes;
                  
      }

Hice eso y me muestra perfectamente todos los planes de este Establecimiento:
- Bachillerato Común
- Bachillerato con Orientación Informática
- Bachillerato con Orientación Jurídico Contable
- Comercial Diurno: Perito Mercantil con Especialización Contable e Impositiva

Y después me muestra la página de detalles original, pero aunque agregué la variable "$todoslosplanes" para poder llamarla más adelante en la plantilla, cuando la invoco, me muestra solamente el último plan... Por qué es esto??

Gracias!!!

Por ClickyMouse

52 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Abr 2008 05:57 pm
Dentro de un loop, una variable se sobreescribe, si quisieras guardar todos los datos los tendrías que guardar en un array. Igual con hacer el loop en donde lo necesites es suficiente

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Abr 2008 07:11 pm
Muchísimas Gracias!!
Ya logré hacerlo de esa manera...

:D

Por ClickyMouse

52 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 22 Abr 2008 03:30 am
Una cosilla más...
Tengo el siguiente código:

Código :

$proyecto13 = array( "[P 13]"    => " - Tiene Proyecto 13"     ," - Tiene Proyecto 13"     => "[P 13]" );


Que me transforma [P 13] en "Tiene Proyecto 13"

Cómo puedo hacer lo mismo, pero que me transforme cierta palabra de una frase?
Ejemplo: Cuando en el Plan me dice "Bachillerato Común" o "Bachillerato con Orientación en...", quiero que me cambie solo la palabra Bachillerato por <strong>Bachillerato</strong> para que me quede resaltado... Se hace con %??

Gracias!

Por ClickyMouse

52 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 22 Abr 2008 08:53 am
Mírate str_replace en el manual, cambias todos los bachilleratos por lo que quieras

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Abr 2008 11:33 pm
Veo mucho código y creo que lo resolvieron con php(no leí el post completo). Basandome en la pregunta, que es juntar los resultados en una variable creo que pudieron hacerlo por SQL.
Solo para que tengan en cuenta, eso se pudo resolver usando el group by(que lo sugiere solisarg), pero agregando la función de GROUP_CONCAT, que concatena todos los elementos de un campo específico.

Por ejemplo:
Tabla "Cosas"
Campos
id__idCategoria__Nombre
1__1____________Algo
2__1____________Algo 2
3__1____________Algo 3

Este SQL:

Código :

SELECT GROUP_CONCAT(Nombre SEPARATOR ", ")
FROM Cosas
GROUP BY idCategoria

Regresaría:
Algo, Algo 2, Algo 3

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 24 Abr 2008 10:12 am
No conocía el group_concat, aunque en este caso el query traía filas repetidas por un join entre muchas tablas de relación uno a muchos. Por ahí con un subselect.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.