Foros del Web » Programando para Internet » PHP »

Separar datos de consulta dependiendo de valor del campo

Estas en el tema de Separar datos de consulta dependiendo de valor del campo en el foro de PHP en Foros del Web. Hola Foreros!!!!. Bien planteo mi problema. Tengo una BD con 2 tablas. Clientes y trabajos. La tabla clientes tiene los siguientes campos: Cita: codcliente (PK) ...
  #1 (permalink)  
Antiguo 30/04/2014, 09:10
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 2 meses
Puntos: 17
Pregunta Separar datos de consulta dependiendo de valor del campo

Hola Foreros!!!!.

Bien planteo mi problema. Tengo una BD con 2 tablas.

Clientes y trabajos.

La tabla clientes tiene los siguientes campos:

Cita:
codcliente (PK)
nombre
apellido
tipo_cliente (puede ser particular o empresa)
....
Cita:
codtrabajo (PK)
codcliente (Foreign Key)
estado
...
Bueno son más campos pero con esos basta...
Lo que quiero conseguir es al realizar una consulta Cómo separar en 2 tablas los datos. En una tabla los Particulares y en otra las Empresas.

Todo esto en la misma Página Php.

Mi código es este, pero de esta forma muestra todos juntos y no se como separarlos, ya que hace falta un while para recorrer y no se como mostrar los datos por separados (2 tablas ordenadas).

Código PHP:
Ver original
  1. <?php
  2.            
  3.            
  4. include("abre_conexion.php");
  5.                                            
  6.                            
  7.     // Imprime casilla de verificación
  8.     $query = "  SELECT cl.codcliente, tr.codtrabajo, cl.nombre, cl.apellido, cl.nom_comercial,
  9.                     cl.telefono, cl.email, cl.web,
  10.                     tr.estado, tr.tipo_trabajo, tr.observacion, tr.descripcion, tr.precio, tr.pagado, tr.ac
  11.                 FROM $tabla_db1 cl, $tabla_db2 tr
  12.                 WHERE cl.codcliente = tr.codcliente
  13.                 ";
  14.                                        
  15.                 $result = mysql_query($query);
  16.                 /*FORMULARIO DE CLIENTES TODOS.*/
  17.                                    
  18.                 echo "<br/><br/> <h3> Vista de Todos Informes Almacenados. </h3><br/>
  19.                                
  20.                     ";
  21.                                    
  22.                 ?>
  23.                            
  24.                 <div align='center' id='padtabla'>
  25.                     <table align='center' border='1' width='100%'>
  26.                                        
  27.                 <tr align='center' bgColor='#FFBF00'>
  28.                     <td> <strong> Cod Cliente </strong> </td>
  29.                         <td> <strong> Cod Trabajo </strong> </td>
  30.                         <td> <strong> Nombre y Apellidos</strong>   </td>
  31.                         <td> <strong> Estado </strong>  </td>
  32.                     </tr>
  33.                                                        
  34.                 <?php
  35.                            
  36.                     while ($registro = mysql_fetch_array($result)) {
  37.                     echo "    
  38.                                            
  39.                         <tr align='center'>
  40.                         <td>".$registro['codcliente']."</td>
  41.                         <td>".$registro['codtrabajo']."</td>
  42.                              <td>".$registro['nombre']."&nbsp;".$registro['apellido']."</td>
  43.                         <td>".$registro['estado']."</td>
  44.                         </tr>
  45.                                            
  46.                         ";
  47.                     }   //CIERRA WHILE
  48.                  ?>
  49.                                                            
  50.                         </table>
  51.                     </div>


Tambien Quiero poder Separar los datos haciendo que los del mismo cliente ejm (cliente 1 ) se agrupen todos sus trabajos juntos.

Luego los del cliente 2. , cliente 3 etc. así con todos.

Saludos y graciias!!!
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #2 (permalink)  
Antiguo 30/04/2014, 12:03
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Separar datos de consulta dependiendo de valor del campo

Para tu primer solicitud, hay varias formas de separar los datos, la más simple es hacer la consulta dos veces, o las veces que sea necesario, según los posibles valores de tu columna (en tu caso dices que es la tipo_cliente )

Otra, es consultar ordenandos por esta columna, leerlos en un while, y cuando cambie el tipo_cliente cerrar la tabla y abrir otra.

Otra opción es meter los datos en arreglos, por tipo_cliente , y luego recorrer el arreglo para crear la tabla. Esta última opción te permitiría lo último que pides, creando y recorriendo el o los arreglos según las condiciones que requieras.
  #3 (permalink)  
Antiguo 01/05/2014, 08:06
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 2 meses
Puntos: 17
Respuesta: Separar datos de consulta dependiendo de valor del campo

La 2 opcion y 3 creo que me vendrían bien, estuve mirando formas con arrays pero no lo conseguí separar por codcliente igual y además los PARTICULARES en un lado y EMPRESAS en otro.

Es decir. si hay en tabla clientes:

Cita:
codcliente (PK)
nombre
apellido
tipo_cliente (puede ser particular o empresa)
Estos datos:

1 juan morales particular
2 carlos menez particular
3 sony empresa


-----------
Lo que quiero es eso bien que has dicho, separar esos 2 clientes particulares en una tabla y los de EMPRESA en otra, que es unirlos por (tipo_cliente)

Y en tabla trabajos estos datos:

Cita:
codtrabajo (PK)
codcliente (Foreign Key)
estado
1000 1 pendiente
1001 2 terminado
1002 1 proceso
1003 3 terminado

.-------------------
Como vez al cliente ( 1 ) tiene DOS trabajos pues que se puedan esos trabajos como tienen el mismo codcliente (fk) unirlos y verlos uno debajo de otro en la consulta.

Me puedes ayudar con un ejemplo porfavor, muchas gracias por tu ayuda y interes!!!.

Al final me gustaría ver los datos mas o menos así.
Cita:
INFORMES TRABAJOS
----------------------------------

Particulares
--------------
1 juan morales tiene los trabajos:

1000 pendiente
1002 proceso


2 carlos menez tiene el trabajo:

1001 terminado.


Empresas
--------------
3 sony tiene el siguiente trabajo:


1003 terminado

----------------------------------------------
------------------------------------------------
Bueno algo así aunque claro eso iria en tablas ordenado más estético pero esa es la idea separar los clientes por su tipo_cliente y además los trabajos del mismo cliente que se vean continuos.


Saludos!!!
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1

Última edición por HackID1; 01/05/2014 a las 08:13
  #4 (permalink)  
Antiguo 02/05/2014, 13:45
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Separar datos de consulta dependiendo de valor del campo

Para lo primero, puedes seguir la recomendación de ocp001a, mientras que para lo segundo, en la misma consulta puedes agrupar a todos los trabajos de cada cliente, utilizando la función GROUP_CONCAT y estableciendo el agrupamiento por el código de cliente con la cláusula GROUP BY.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 02/05/2014, 14:42
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 2 meses
Puntos: 17
Pregunta Respuesta: Separar datos de consulta dependiendo de valor del campo

Gracias Alexis88 por tus ayudas. mira he estado mirando como funciona la función GROUP_CONCAT, bien he conseguido unir las descripciones de los trabajos que tengan el mismo codcliente.

Es decir cliente 1, si tiene 3 trabajos las TRES descripciones de los 3 trabajos se verán uno seguido de otro, pero separados por coma en el mismo campo de la tabla.


Me puedes ayudar con: ¿ como hago para separar esos 3 campos en 3 lineas diferentes.

El código PHP es el siguiente.

Código PHP:
Ver original
  1. <?php
  2.            
  3.            
  4.             include("abre_conexion.php");
  5.                                            
  6.                            
  7.                             // Imprime casilla de verificación
  8.                             $query = "SELECT cl.codcliente, tr.codtrabajo, cl.nombre, cl.apellido, cl.nom_comercial,
  9.                                             cl.telefono, cl.email,
  10.                                             GROUP_CONCAT(tr.estado) AS estado,
  11.                                             GROUP_CONCAT(tr.tipo_trabajo) AS tipo_trabajo,
  12.                                             GROUP_CONCAT(tr.observacion) AS observacion,  
  13.                                             GROUP_CONCAT(tr.descripcion) AS descripcion,
  14.                                             GROUP_CONCAT(tr.precio) AS precio,
  15.                                             GROUP_CONCAT(tr.pagado) AS pagado,
  16.                                             GROUP_CONCAT(tr.ac) AS ac
  17.                                         FROM $tabla_db1 cl, $tabla_db2 tr
  18.                                         WHERE cl.codcliente = tr.codcliente
  19.                                         AND cl.tipo_cliente = 'particular'
  20.                                         GROUP BY cl.codcliente
  21.                                        
  22.                                     ";
  23.                                        
  24.                             $result = mysql_query($query);
  25.                                     /*FORMULARIO DE CLIENTES TODOS.*/
  26.                                    
  27.                                 echo "<br/><br/> <h3> Informes de Particulares. </h3><br/>
  28.                                
  29.                                     ";
  30.                                    
  31.                             ?>
  32.                            
  33.                                     <div align='center' id='padtabla'>
  34.                                         <table align='center' border='1' width='100%'>
  35.                                        
  36.                                             <tr align='center' bgColor='#FFBF00'>
  37.                                                 <td> <strong> Cod Cliente </strong>             </td>
  38.                                                 <td> <strong> Cod Trabajo </strong>             </td>
  39.                                                 <td> <strong> Nombre y Apellidos</strong>       </td>
  40.                                                 <td> <strong> Tel&eacute;fono  </strong>        </td>
  41.                                                 <td> <strong> Email </strong>                   </td>
  42.                                                 <td> <strong> Estado </strong>                  </td>
  43.                                                 <td> <strong> Tipo Trabajo </strong>            </td>
  44.                                                 <td> <strong> Observaci&oacute;n </strong>      </td>
  45.                                                 <td> <strong> Descripci&oacute;n </strong>      </td>
  46.                                                 <td> <strong> Presupuesto </strong>             </td>
  47.                                                 <td> <strong> Pagado </strong>                  </td>
  48.                                                 <td> <strong> AC </strong>                      </td>
  49.                                             </tr>
  50.                                
  51.                             <?php
  52.                            
  53.                             while ($registro = mysql_fetch_array($result)) {
  54.                            
  55.                                 $arrayDatosDeLaConsulta[] = $registro;
  56.                                
  57.                                
  58.                            
  59.                                 echo "    
  60.                                            
  61.                                             <tr align='center'>
  62.                                                 <td>".$registro['codcliente']."</td>
  63.                                                 <td>".$registro['codtrabajo']."</td>
  64.                                                 <td>".$registro['nombre']."&nbsp;".$registro['apellido']."</td>
  65.                                                 <td>".$registro['telefono']."</td>
  66.                                                 <td>".$registro['email']."</td>
  67.                                                 <td>".$registro['estado']."</td>
  68.                                                 <td>".$registro['tipo_trabajo']."</td>
  69.                                                 <td>".$registro['observacion']."</td>
  70.                                                 <td>".$registro['descripcion']."</td>
  71.                                                 <td>".$registro['precio']."</td>
  72.                                                 <td>".$registro['pagado']."</td>
  73.                                                 <td>".$registro['ac']."</td>
  74.                                             </tr>
  75.                                            
  76.                                     ";
  77.                              }  //CIERRA WHILE
  78.                              
  79.  ?>
  80.                                                            
  81.                                         </table>
  82.                                     </div>

Gracias a tu ayuda he podido unir los trabajos con el mismo codcliente uno debajo de otro, pero quiero que se puedan ver en lineas de la tabla uno debajo de otro y que se vea que todos pertenecen al mismo CLIENTE. (ejemplo el codcliente 1).



Espero no sea mucha molestia un saludoo amigo!! .


PD: Lo que quiero saber es como poder realizar el EXPLODE con los campos necesarios, para poder mostrarlos cada uno en un <td> </td> de la tabla.
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1

Última edición por HackID1; 02/05/2014 a las 15:07
  #6 (permalink)  
Antiguo 02/05/2014, 15:41
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 2 meses
Puntos: 17
Respuesta: Separar datos de consulta dependiendo de valor del campo

Buenas.! Bueno he intentado lo de separar los campos del GROUP_CONCAT() en diferentes lineas de la siguiente forma, aunque cuando hay un campo vacio, se desordena un poco la vista y orden.

Código PHP:
Ver original
  1. $query = "SELECT cl.codcliente, tr.codtrabajo, cl.nombre, cl.apellido, cl.nom_comercial,
  2.         cl.telefono, cl.email,
  3.         GROUP_CONCAT(tr.estado SEPARATOR '<br/><br/>') AS estado,
  4.         GROUP_CONCAT(tr.tipo_trabajo SEPARATOR '<br/><br/>') AS tipo_trabajo,
  5.         GROUP_CONCAT(tr.observacion SEPARATOR '<br/><br/>') AS observacion,  
  6.         GROUP_CONCAT(tr.descripcion SEPARATOR '<br/><br/>') AS descripcion,
  7.         GROUP_CONCAT(tr.precio SEPARATOR '<br><br/>') AS precio,
  8.         GROUP_CONCAT(tr.pagado SEPARATOR '<br><br/>') AS pagado,
  9.         GROUP_CONCAT(tr.ac SEPARATOR '<br><br/>') AS ac
  10.         FROM $tabla_db1 cl, $tabla_db2 tr
  11.         WHERE cl.codcliente = tr.codcliente
  12.         AND cl.tipo_cliente = 'particular'
  13.         GROUP BY cl.codcliente
  14.                                        
  15.         ";

Como ven lo unico que hago es separar los datos por saltos de linea ( <br> ) .
Lo probé abriendo <td> o <tr> pero no he podido verlos de forma correcta.
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #7 (permalink)  
Antiguo 02/05/2014, 16:27
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Separar datos de consulta dependiendo de valor del campo

Podrías crear una tabla dentro de la celda correspondiente, utilizas la función explode para convertir el grupo de trabajos en un array y lo iteras, creando una fila y columna para cada dato dentro de la celda de la tabla principal.

Código PHP:
Ver original
  1. <td>
  2. <?php
  3.     $trabajos = explode(',', $registro['tipo_trabajo']);
  4.     foreach ($trabajos as $trabajo){
  5. ?>
  6.         <table>
  7. <?php
  8.             <tr>
  9.                 <td>
  10.                     <?=$trabajo?>
  11.                 </td>
  12.             </tr>
  13. ?>
  14.         </table>
  15. <?php        
  16.     }
  17. ?>
  18. </td>

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: campo, dependiendo, formulario, mysql, registro, select, tabla, valor
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 20:18.