Foros del Web » Programando para Internet » PHP »

Ayuda a imprimir una sola vez registro de bd

Estas en el tema de Ayuda a imprimir una sola vez registro de bd en el foro de PHP en Foros del Web. Hola que tal yo aqui de nuevo con un problemita. resulta que tengo tres tablas: sucusral, servicios, serxsuc sucursal: Tengo los datos de mi sucursal: ...
  #1 (permalink)  
Antiguo 02/08/2010, 08:52
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 11 meses
Puntos: 2
Pregunta Ayuda con repeticion de registros INNER JOIN con tres tablas

Hola que tal yo aqui de nuevo con un problemita.

resulta que tengo tres tablas: sucusral, servicios, serxsuc
  • sucursal:Tengo los datos de mi sucursal:
  • nombre,direccion,telefono,colonia
  • servicios:tengo el nombre de servicio que se ofrese pagar:
  • Agua, luz
  • serxsuc:Tengo los dos id_sucusral, id_ servicio

Entonces cuando junto las tablas para sacar los resultados me saca repetidamente el nombre de la sucursal cuantos servicios tenga asigada esa sucursal es decir si la sucursal tiene 5 servicios asignados me repite 5 veces el nombre de sucursal con los servicios.

e aqui mi qry:

Cita:
select tblsucursal.nombre,direccion,colonia,tblservicio.n ombre from tblsucursal INNER JOIN tblserxSuc on tblsucursal.id_sucursal = tblserxsuc.id_sucursal
INNER JOIN tblservicio on tblservicio.id_servicio = tblserxsuc.id_servicio
where tblsucursal.id_municipio=1
e aqui el resultado:

Cita:
Sucursal1 Direccion Zona Centro Agua
Sucursal1 Direccion Zona Centro Cable
Sucursal1 Direccion Zona Centro Luz
Sucursal1 Direccion Zona Centro Telefono
Sucursal1 Direccion Zona Centro Colegiatura


Sucursal2 Zona Centro Zona Centro Agua
Sucursal2 Zona Centro Zona Centro Cable
Sucursal2 Zona Centro Zona Centro Luz

en sucursal1 se pueden pagar hasta 5 servicios mientras queen sucursal2 solo tres servicios.


Entonces mi duda es como puedo tener elsiguiente resultado que solo se imprima una vez la sucursal y los servicios que tenga asignaos????:

Cita:

Sucursal1
Direccion
Zona centro
Agua,Cable,Luz,Telefono,Colegiatura

Sucursal2
Direccion
Zona centro
Agua, cable, luz

La verdad no he dado con la solucion porfavor pueden ayudarme. de ante mano muchas gracias

Última edición por sagitariosTheBest; 09/08/2010 a las 14:09
  #2 (permalink)  
Antiguo 02/08/2010, 09:42
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Ayuda a imprimir una sola vez registro de bd

Vía SQL no sabría darte una respuesta, pero con PHP si, te daré un ejemplo, luego tu lo modificas según tus necesidades
Código PHP:
Ver original
  1. <?php
  2. $ultSucursal = '';
  3. $newArray = array();
  4. $servicios = array();
  5. while($row = mysql_fetch_assoc($query)) {
  6.     if ($ultSucursal == $row['sucursal']) {
  7.         $servicios[] = $row['servicios'];
  8.     }else {
  9.         if (count($servicios) != 0) {
  10.             $newArray[] = array(
  11.                 'sucursal'=>$ultSucursal,
  12.                 'servicios'=>$servicios
  13.             );
  14.         }
  15.  
  16.         $servicios = array();
  17.         $servicios[] = $row['servicios'];
  18.  
  19.     }
  20.     $ultSucursal = $row['sucursal'];
  21. }
  22.  
  23. /**
  24. * Al final tendrias un array mas o menos así
  25. * Sucursal1
  26. * -> Telefono
  27. * -> Agua
  28. * -> Etc
  29. * Sucursal2
  30. * -> Telefono
  31. */

Es un ejemplo muy genérico, pero esa es la idea, espero te sirva
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Última edición por Nemutagk; 02/08/2010 a las 09:49
  #3 (permalink)  
Antiguo 02/08/2010, 12:10
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 11 meses
Puntos: 2
De acuerdo Respuesta: Ayuda a imprimir una sola vez registro de bd

sisi la idea es en php sorry por no aclararlo
deja pruebo lo que me comentas muchas gracias eso eslo que andaba buscando
  #4 (permalink)  
Antiguo 02/08/2010, 13:18
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 11 meses
Puntos: 2
Pregunta Respuesta: Ayuda a imprimir una sola vez registro de bd

Hola me prodrias decir cual es el array que debo imprimir para tener el resultado que me mencionas??

Lo he estado observando pero no se como imprimirlo, por ejmeplo esta parte da los siguiente

Código PHP:
  if ($ultSucursal == $row['sucursal']) {
        
$servicios[] = $row['servicios'];    
    } 
resultado:
Cita:
Corresponde a sucursal1
$servicios[]
Array ( [0] => Agua [1] => Cable )
Array ( [0] => Agua [1] => Cable [2] => Luz )
Array ( [0] => Agua [1] => Cable [2] => Luz [3] => Telefono )
Array ( [0] => Agua [1] => Cable [2] => Luz [3] => Telefono [4] => Colegiatura )

Corresponde a sucursal2
$servicios[]
Array ( [0] => Agua [1] => Cable )
Array ( [0] => Agua [1] => Cable [2] => Luz
esta parte:
Código PHP:

else {
        if (
count($servicios) != 0) {
            
            
$newArray[] = array(
                
'sucursal'=>$ultSucursal,
                
'servicios'=>$servicios
                
); 
Este resultado se ve como lo quiero imprimir en pantalla ya esta formado pero la pregunta como imprimo sucursal1 y sucursal 2 al codigo de mas abajo ya no le entendi muy bien podrias decirme como imprimo para que me de el resultado que me mencionas???
Cita:

Array ( [0] => Array ( [sucursal] => Sucursal1
[servicios] => Array
( [0] => Agua
[1] => Cable
[2] => Luz
[3] => Telefono
[4] => Colegiatura ) ) )
Este es el codigo completo que estoy usando

Código PHP:
<?php
 
$sucursal
=$_POST["sucursal"];
include(
"conecta.php");

$query="select sucursal,direccion,colonia,servicios from tblsucursal INNER JOIN  tblserxSuc on tblsucursal.id_sucursal = tblserxsuc.id_sucursal
                                        INNER JOIN tblservicio on tblservicio.id_servicio = tblserxsuc.id_servicio
                                        where tblsucursal.id_municipio=$sucursal"
;

$ultSucursal '';
$newArray = array();
$servicios = array();

$resulta=mysql_query($query);

 if(!
$resulta){
    echo 
"no se envio la consulta";
 }else{

//aqui comienza codigo que me has pasado

while($row mysql_fetch_assoc($resulta)){
        
    if (
$ultSucursal == $row['sucursal']) {
        
$servicios[] = $row['servicios'];
    
    }else {
        if (
count($servicios) != 0) {
            
            
$newArray[] = array(
                
'sucursal'=>$ultSucursal,
                
'servicios'=>$servicios
                
);
            
            
        }
 
//cuando imprimo estas variables me da el resultado que pongo abajo en la cita
        
$servicios = array();
   echo     
$servicios[] = $row['servicios']."<br/>";
        
 
    }
   echo 
$ultSucursal $row['sucursal']."<br/>";
 }
 
}
mysql_close($conn);
?>
Resultado de imprimir arreglo $servivios[] y $ultSucursal
Cita:
Agua
Sucursal1
Cable
Sucursal1
Luz
Sucursal1
Telefono
Sucursal1
Colegiatura
Sucursal1


Agua
Sucursal2
Cable
Sucursal2
Luz
Sucursal2
No se como imprimirlo alguna idea

Última edición por sagitariosTheBest; 02/08/2010 a las 13:52
  #5 (permalink)  
Antiguo 02/08/2010, 17:25
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Ayuda a imprimir una sola vez registro de bd

No no no no =P no utilices echos en el while, o entonces no tiene caso utilizar arreglos, la idea era primero ordenar los campos en $newArray y después (fuera del while) tu trabajar con el arreglo final, pero bueno, es un idea, si te acomodas mas dando echos aquí y echos alla pues como se te acomode mejor, la idea original era para tener el código ordenado..

Ahora ya decirte como utilizar el arreglo final ($newArray) es hacerte todo el trabajo no crees >.<, pero bueno...

Cita:
Corresponde a sucursal1
$servicios[]
Array ( [0] => Agua [1] => Cable )
Array ( [0] => Agua [1] => Cable [2] => Luz )
Array ( [0] => Agua [1] => Cable [2] => Luz [3] => Telefono )
Array ( [0] => Agua [1] => Cable [2] => Luz [3] => Telefono [4] => Colegiatura )

Corresponde a sucursal2
$servicios[]
Array ( [0] => Agua [1] => Cable )
Array ( [0] => Agua [1] => Cable [2] => Luz
Veo que en el código se repiten los servicios (la verdad es que no probé el código y solo genere el array en la mente >.<, para evitar que se repitan los servicios cambiamos el código

Código PHP:
Ver original
  1. <?php
  2. $ultSucursal = '';
  3. $newArray = array();
  4. $servicios = array();
  5. while($row = mysql_fetch_assoc($query)) {
  6.     if ($ultSucursal == $row['sucursal']) {
  7.     if (array_search($row['servicios'],$servicios) === false) {     //Upps me equivoque en el mensaje original, arreglado el pequeño error
  8.         $servicios[] = $row['servicios'];
  9.     }
  10.     }else {
  11.         if (count($servicios) != 0) {
  12.             $newArray[] = array(
  13.                 'sucursal'=>$ultSucursal,
  14.                 'servicios'=>$servicios
  15.             );
  16.         }
  17.  
  18.         $servicios = array();
  19.         $servicios[] = $row['servicios'];
  20.  
  21.     }
  22.     $ultSucursal = $row['sucursal'];
  23. }

En teoría ya únicamente te generaría...
Cita:
Corresponde a sucursal1
$servicios[]
Array ( [0] => Agua [1] => Cable [2] => Luz [3] => Telefono [4] => Colegiatura )
Más fácil no te la puedo dejar, seria pecado >.<, aparte la idea es aprender no entregar el trabajo hecho =P

Para aclarar al final, el único arreglo (array) con el que debes trabajar y te entregará toda la información es $newArray
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Última edición por Nemutagk; 02/08/2010 a las 17:42
  #6 (permalink)  
Antiguo 02/08/2010, 19:51
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 11 meses
Puntos: 2
Pregunta Respuesta: Ayuda a imprimir una sola vez registro de bd

Hola Nemutagk:

Si tienes razon pero como veras estoy lleno de dudas con respuecto a este tema la veradd nunca pense que fuse complicado.
ahora veo que la estructrura de $newArray es la siguiente:

Cita:
Array ( [0] => Array ( [sucursal] => Sucursal1
[servicios] => Array ( [0] => Agua
[1] => Cable
[2] => Luz
[3] => Telefono
[4] => Colegiatura ) ) )

Segun yo se prodria imprimir de la siguiente forma:
Código PHP:
echo $newArray[0]['sucursal'];
echo 
$newArray[0]['servicios'][0];
echo 
$newArray[0]['servicios'][1];
echo 
$newArray[0]['servicios'][2];
echo 
$newArray[0]['servicios'][3];
echo 
$newArray[0]['servicios'][4]; 

o con un foreach:

Código PHP:
foreach($newArray as $value){
      
    foreach(
$value as $value2){
        echo 
$value2;
    }
       foreach(
$value2 as $value3){
        echo 
$value3."<br/>";
       }      
        
    } 
Pero con foreach me muestra Array:

Cita:

Sucursal1ArrayAgua
Cable
Luz
Telefono
Colegiatura
Pero ya no existe la sucursal2 En el arreglo final de $newArray???

Sorry si te molesta tanta pregunta ingenua.

Última edición por sagitariosTheBest; 02/08/2010 a las 21:57
  #7 (permalink)  
Antiguo 02/08/2010, 22:09
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 11 meses
Puntos: 2
Respuesta: Ayuda a imprimir una sola vez registro de bd

En esta parte no estaremos evitando que sucursal2 se agregue a $newArray??? porque aqui estamos evitando los duplicados.
y tambien se duplican los servicios para sucursal2

Código PHP:
if (array_search($row['servicios'],$servicios) === false) {     
        
$servicios[] = $row['servicios'];
    } 

Última edición por sagitariosTheBest; 02/08/2010 a las 22:25
  #8 (permalink)  
Antiguo 03/08/2010, 04:22
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Ayuda a imprimir una sola vez registro de bd

Cita:
Iniciado por sagitariosTheBest Ver Mensaje
En esta parte no estaremos evitando que sucursal2 se agregue a $newArray??? porque aqui estamos evitando los duplicados.
y tambien se duplican los servicios para sucursal2

Código PHP:
if (array_search($row['servicios'],$servicios) === false) {     
        
$servicios[] = $row['servicios'];
    } 
Nop, lo que hace ese código es evitar que se repitan los servicios en las sucursales, ejemplo, evita que sucursal 1 tenga repetido agua, así que primero verificamos si ya se agrego dicho servicio, si no se ah agregado lo agregamos...

Para imprimir el arreglo es muy fácil, me sorprende sinceramente que se te complique...
Código PHP:
Ver original
  1. <?php
  2. foreach($newArray as $sucursal) {
  3.     echo '<p>La sucursal: '.$sucursal['sucursal'].'</p>';
  4.     echo '<ul><li>Tiene los siguientes servicios:</li>';
  5.     foreach($sucursal['servicios'] as $servicios) {
  6.         echo '<li>'.$servicios.'</li>';
  7.     }
  8.     echo '</ul>';
  9. }

Ahora, si no te aparece las siguientes sucursales verifica tu SQL, ya que en el while donde recolectamos y damos formato a las variables no estamos excluyendo ninguna sucursal...

Para verificar si toda la información se ah agregado, después de todo el código que te envié, has un...
Código PHP:
Ver original
  1. echo '<pre>';
  2. var_dump($newArray);
  3. echo '</pre>';

Y verifica si todo esta como deberia
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Última edición por Nemutagk; 03/08/2010 a las 04:39
  #9 (permalink)  
Antiguo 03/08/2010, 12:38
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 11 meses
Puntos: 2
De acuerdo Respuesta: Ayuda a imprimir una sola vez registro de bd

La verdad te agradesco muchisimo apresio tu atencion me has ayudada bastante y a comprender cosas que no habia hecho asi aprendo muchisimas gracias eres genial :)

revisare el sql para ver que estoy haciendo mal
te agradesco de verdad he aprendido gracias

Última edición por sagitariosTheBest; 03/08/2010 a las 12:45
  #10 (permalink)  
Antiguo 03/08/2010, 13:20
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 11 meses
Puntos: 2
Busqueda Respuesta: Ayuda a imprimir una sola vez registro de bd

resultado de var_dump:

Código PHP:
array(1) {
  [
0]=>
  array(
2) {
    [
"sucursal"]=>
    
string(17"Sucursal1"
    
["servicios"]=>
    array(
5) {
      [
0]=>
      
string(4"Agua"
      
[1]=>
      
string(5"Cable"
      
[2]=>
      
string(3"Luz"
      
[3]=>
      
string(8"Telefono"
      
[4]=>
      
string(11"Colegiatura"
    
}
  }


sabes pienso que como el array de $servicios[] se esta evitando que se repita se eliminan los servicios de la sucursal2 porque sucursal2 tambien ofrece Agua,Cable,Luz entonses como se revisa que no se repitan solo llena una vez el array de servicios con los de sucursal1 porque si llena los de sucursal2 se estaria repitiendo en el array $servicios
  #11 (permalink)  
Antiguo 03/08/2010, 13:24
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Ayuda a imprimir una sola vez registro de bd

Realmente se me hace raro, pero bueno, intenta quitandole la validación de servicios y ve que sucede...
Código PHP:
Ver original
  1. //Cambia esto...
  2. if (array_search($row['servicios'],$servicios) === false) {    
  3.         $servicios[] = $row['servicios'];
  4. }
  5.  
  6. //Por esto
  7. $servicios[] = $row['servicios'];
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #12 (permalink)  
Antiguo 04/08/2010, 14:27
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 11 meses
Puntos: 2
Pregunta Respuesta: Ayuda a imprimir una sola vez registro de bd

Hola:
yo de nuevo oye he notado algo no se si me puedas seguir ayudando.

mira lo que he notado es en esta seccion de codigo he recortado el codigo que me has dado para no tener tanto codigo.

Código PHP:

while($row mysql_fetch_assoc($resulta)){    

          
$newArray=array('sucursal'=>$sucursal);  
          
$sucursal=$row['sucursal'];
    
 } 
aqui si yo imprimo $row['sucursa] dentro del while si me imprime todos los registros recuperados.

pero cuando asigno a $newArray y luego imprimo no me imprime el ultimo registro desde aqui hay algo raro no entiendo por que no asigna todos los registros.
  #13 (permalink)  
Antiguo 04/08/2010, 14:51
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Ayuda a imprimir una sola vez registro de bd

Cita:
$newArray=array('sucursal'=>$sucursal);
$sucursal=$row['sucursal'];
esas lineas estan invertidas ya que tu llenas el array con la variable y estas llenando primero el array y luego la variable x eso al ultimo no te llena nada suerte
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #14 (permalink)  
Antiguo 04/08/2010, 19:36
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 11 meses
Puntos: 2
Pregunta Respuesta: Ayuda a imprimir una sola vez registro de bd

ALguien puede ver el error lo que pasa es que se repiten los registros
la verdad me he cansado de buscar pero no encuentro donde puede estar el problema
Código PHP:
<?php
$ultsucursal
='';
$servicios = array();
include (
"conecta.php");

$query "select * from tblsucursal,tblserxsuc,tblservicio
              where tblsucursal.id_sucursal = tblserxsuc.id_sucursal and tblserxsuc.id_servicio = tblservicio.id_servicio and tblsucursal.id_municipio=1
              order by sucursal asc"
;

$resulta mysql_query($query);

if (!
$resulta) {
    echo 
"no se envio la consulta";


while(
$row mysql_fetch_assoc($resulta)){
          
          
$ultsucursal=$row['sucursal'];   
          
           
//buscando resultados repetidos
           
if(array_search($row['servicios'],$servicios)=== false){
            
$servicios[] = $row['servicios'];            
           }
           
           
$newArray[]=array('sucursal'=>$ultsucursal,'servicios'=>$servicios);
          
                   
         }
//fin de while
         
foreach ($newArray as $sucursal) {
    echo 
'<p>La sucursal: ' $sucursal['sucursal'] . '</p>';
    echo 
'<ul><li>Tiene los siguientes servicios:</li>';
    foreach (
$sucursal['servicios'] as $servicios) {
        echo 
'<li>' $servicios '</li>';
    }
    echo 
'</ul>';
}
Este es el resultado que me da se repite y solo quiero que se escriba una sola vez:
Cita:

La sucursal: sucursal1

Tiene los siguientes servicios:
Luz
La sucursal: sucursal1

Tiene los siguientes servicios:
Luz
Cable
La sucursal: sucursal1

Tiene los siguientes servicios:
Luz
Cable
Agua
La sucursal: sucursal2

Tiene los siguientes servicios:
Luz
Cable
Agua
Colegiatura
La sucursal: sucursal2

Tiene los siguientes servicios:
Luz
Cable
Agua
Colegiatura
Telefono
La sucursal: sucursal2

Tiene los siguientes servicios:
Luz
Cable
Agua
Colegiatura
Telefono
La sucursal: sucursal2

Tiene los siguientes servicios:
Luz
Cable
Agua
Colegiatura
Telefono
La sucursal: sucursal2

Tiene los siguientes servicios:
Luz
Cable
Agua
Colegiatura
Telefono
  #15 (permalink)  
Antiguo 04/08/2010, 20:04
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Ayuda a imprimir una sola vez registro de bd

Mira, no se que intentas hacer, el código ya te lo di, y funciona, si no lo quieres utilizar ya es cosa tuya...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #16 (permalink)  
Antiguo 05/08/2010, 09:41
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 11 meses
Puntos: 2
Respuesta: Ayuda a imprimir una sola vez registro de bd

Pues mira la veradd se me hubiera funcionado el codigo no tendria por que estar preguntando aun, ya te mencione que problemas tenia, y como ya no respondiste por eso estoy tratande de desmenusar el codigo que me has dado, por que seguro no lo has probado.

no se trata de que te molestes sino de ayudar lo que deseo es lo que ya sabes he tartado y tratado pero no consigo el resultado por eso es que sigo preguntando. valdria la pena si checaras tu codigo por si tengo razon no cres? no se pierde nada en tomarte unos minutos para revisarlo y constatar lo que te estoy diciendo. es mas sigustas te mando la base de datos junto con el query y tu codigo para que lo cheuqes

pues el codigo que me has pasado solo imprime una sucursal

Última edición por sagitariosTheBest; 05/08/2010 a las 09:50
  #17 (permalink)  
Antiguo 05/08/2010, 10:23
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Ayuda a imprimir una sola vez registro de bd

Ok, tienes razón, y me disculpo por no haber probado el código como debería haberlo hecho...

Ahora, eh probado este código, y funciona, pero, como no tengo los registros que tu tienes (mas que nada, como están formados los registros que recuperas) no estoy seguro si te va a funcionar, en el código esta un ejemplo de uso...
Código PHP:
Ver original
  1. <?php
  2. function search_in_array($search,$array) {
  3.     $count = 0;
  4.     foreach($array as $item) {
  5.         if ($item['sucursal'] == $search) {
  6.             return $count;
  7.         }
  8.         $count++;
  9.     }
  10.  
  11.     return false;
  12. }
  13.  
  14. //Un arreglo para probar el código
  15. $items = array(
  16.     array('sucursal','agua'),
  17.     array('sucursal','agua1'),
  18.     array('sucursal','agua2'),
  19.     array('sucursal','agua3'),
  20.     array('sucursal','agua4'),
  21.     array('sucursal','agua5'),
  22.     array('sucursa2','agua'),
  23.     array('sucursa2','agua1'),
  24.     array('sucursa2','agua2'),
  25.     array('sucursa2','agua3'),
  26.     array('sucursa2','agua4'),
  27.     array('sucursa2','agua5')
  28. );
  29.  
  30. $newArray = array();
  31. foreach($items as $item) {
  32.     $keyArray = search_in_array($item[0],$newArray);
  33.     if ($keyArray === false) {
  34.         $newArray[]['sucursal'] = $item[0];
  35.     }else {
  36.         $newArray[$keyArray]['servicios'][] = $item[1];
  37.     }
  38. }
  39.  
  40. echo '<pre>';
  41. var_dump($newArray);
  42. echo '</pre>';

Al final se obtiene el siguiente resultado...
Código:
array(2) {
  [0]=>
  array(2) {
    ["sucursal"]=>
    string(8) "sucursal"
    ["servicios"]=>
    array(5) {
      [0]=>
      string(5) "agua1"
      [1]=>
      string(5) "agua2"
      [2]=>
      string(5) "agua3"
      [3]=>
      string(5) "agua4"
      [4]=>
      string(5) "agua5"
    }
  }
  [1]=>
  array(2) {
    ["sucursal"]=>
    string(8) "sucursa2"
    ["servicios"]=>
    array(5) {
      [0]=>
      string(5) "agua1"
      [1]=>
      string(5) "agua2"
      [2]=>
      string(5) "agua3"
      [3]=>
      string(5) "agua4"
      [4]=>
      string(5) "agua5"
    }
  }
}
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #18 (permalink)  
Antiguo 09/08/2010, 14:00
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 11 meses
Puntos: 2
Pregunta Ayuda con repeticion de registros con INNER JOIN

Me rindo no encuentro la solucion. es que el problema radica desde la consulta pero esa es la manera de hacerla.

no doy con la logica para quedarme con el ultimo resultado. este codigo es el correcto si lo hace bien solo que repite la impresion cada vez que se encuentra un resultado.

no se si se pueda hacer con una subconsulta? o algo por el estilo.

Porque el codigo si esta bien.

Solo que haya alguna forma de crear otro arreglo con el resultado final. por que si se fijan el resultado final de las repeticiones que he mostrado arriba son los resultados deseados.


pero como en el while le decimos que cada vez que encuentre un resultado lo guarde en el arreglo y pues guarda las repeticiones y por lo tanto se imprimen tambien.la verdad no hayo como hacerle ya no se donde buscar ni que preguntar ps ahi dejo el post por si alguien por ahi algun dia lo lee y ojala pueda publicar la solucion.

muchas gracias a los que me ayudaron hasta aqui saludos

Código PHP:
$ultsucursal='';
$servicios = array();
include (
"conecta.php");

$query "select * from tblsucursal,tblserxsuc,tblservicio
              where tblsucursal.id_sucursal = tblserxsuc.id_sucursal and tblserxsuc.id_servicio = tblservicio.id_servicio and tblsucursal.id_municipio=1
              order by sucursal asc"
;

$resulta mysql_query($query);

if (!
$resulta) {
    echo 
"no se envio la consulta";


while(
$row mysql_fetch_assoc($resulta)){
          
          
$ultsucursal=$row['sucursal'];   
          
           
//buscando resultados repetidos
           
if(array_search($row['servicios'],$servicios)=== false){
            
$servicios[] = $row['servicios'];            
           }
           
           
$newArray[]=array('sucursal'=>$ultsucursal,'servicios'=>$servicios);
          
                   
         }
//fin de while
         
foreach ($newArray as $sucursal) {
    echo 
'<p>La sucursal: ' $sucursal['sucursal'] . '</p>';
    echo 
'<ul><li>Tiene los siguientes servicios:</li>';
    foreach (
$sucursal['servicios'] as $servicios) {
        echo 
'<li>' $servicios '</li>';
    }
    echo 
'</ul>';


Última edición por sagitariosTheBest; 10/08/2010 a las 12:02
  #19 (permalink)  
Antiguo 09/08/2010, 23:54
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Ayuda a imprimir una sola vez registro de bd

hola
bueno, pues con los arrays es de las mejores soluciones al asunto,
y puedes revisar eso en el segundo link que te voy a dejar

sin embargo, te dejo un link antes donde verás lo que te comentaba
de dividir la consulta en 2

así pues:

aquí encontraras un ejemplo usando 2 consultas como te comentaba
en el post de mysql que creaste

y aquí encontrarás un ej similar pero pues aquí agrupan los datos similares
porque los necesitan contar, pero se crean arrays para en caso que sean
más de 10 registros, ponerlos en grupos, pero esto obviamente no es tu caso,
pero es una guía para que veas como se podrían hacer arrays también

espero te sirvan los links
saludos
__________________
"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
  #20 (permalink)  
Antiguo 10/08/2010, 10:16
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 11 meses
Puntos: 2
Pregunta Respuesta: Ayuda a imprimir una sola vez registro de bd

Hola mortiprogramador:

estube viendo los post y son algo como lo que ya tengo en este ultimo codigo que puse.

Aqui el problema es que el arreglo se forma deacuerdo con la consulta, como te comentaba en el de mysql. me repite los nombres por que la clausala WHERE se cumple pues cada sucursal tiene un servicio asignado diferente.
por eso es que se repite.

ahora ya esta formado el array con la informacion, solo que no encuentra la forma de "depurarlo" por desirlo asi ya que $newArray ya tiene la informacion cargada aunque repetida, pero no se como hacer para sacar los ultimos resultados para cada sucursal que son los que me interesan si te fijas en los ultimos post se ve el resultado.

no se si puedas orientarme para hacer algo que saque eso resultados..

muchas gracias de ante mano y saludos
  #21 (permalink)  
Antiguo 10/08/2010, 10:39
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Ayuda a imprimir una sola vez registro de bd

hola
bueno, pues es que como yo lo veo, el asunto esta en que estas usando un array sin posiciones para asignar de nuevo los datos ($newArray[]) , pero si te fijas en el segundo link que te deje, yo si asigno posiciones al array
$array[$row['com'].$row['direccion']][$i]

que en tu caso podría ser
$array[$row['sucursal']][$i]

o bueno, por lo menos yo lo he hecho así en ocasiones
y me ha funcionado

revisa de nuevo con calma el segundo link, y trata de
adaptarlo al tuyo, y si lo ves enredado, pues postea de nuevo
y reviso yo con calma lo tuyo, mientras respondo otros temas
saludos
__________________
"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
  #22 (permalink)  
Antiguo 10/08/2010, 11:48
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 11 meses
Puntos: 2
Pregunta Respuesta: Ayuda a imprimir una sola vez registro de bd

Mira este es el array como esta formado:
la verdad no entiendo a que te refieres sin pociciones segun yo tiene sus pociones esta es la estructura del array $newArray te pongo los comentarios de las pocisiones bueno segun yo no soy el experto tu eres el que sabes por eso sigo aqui sin resolverlo :(

Código PHP:
Array
(
    [
0] => Array//pocision
        
(
            [
sucursal] => Sucursal1
            
[servicios] => Array
                (
                    [
0] => Luz
                
)

        )

    [
1] => Array //pocision
        
(
            [
sucursal] => Sucursal1
            
[servicios] => Array
                (
                    [
0] => Luz
                    
[1] => Cable
                
)

        )

    [
2] => Array //pocision este es el resultado que deseo imprimir en pantalla solo este de sucursal1
        
(
            [
sucursal] => Sucursal1
            
[servicios] => Array
                (
                    [
0] => Luz
                    
[1] => Cable
                    
[2] => Agua
                
)

        )

    [
3] => Array
        (
            [
sucursal] => Sucursal2
            
[servicios] => Array
                (
                    [
0] => Luz
                    
[1] => Cable
                    
[2] => Agua
                    
[3] => Colegiatura
                
)

        )

    [
4] => Array
        (
            [
sucursal] => Sucursal2
            
[servicios] => Array
                (
                    [
0] => Luz
                    
[1] => Cable
                    
[2] => Agua
                    
[3] => Colegiatura
                    
[4] => Telefono
                
)

        )

    [
5] => Array
        (
            [
sucursal] => Sucursal2
            
[servicios] => Array
                (
                    [
0] => Luz
                    
[1] => Cable
                    
[2] => Agua
                    
[3] => Colegiatura
                    
[4] => Telefono
                
)

        )

    [
6] => Array
        (
            [
sucursal] => Sucursal2
            
[servicios] => Array
                (
                    [
0] => Luz
                    
[1] => Cable
                    
[2] => Agua
                    
[3] => Colegiatura
                    
[4] => Telefono
                
)

        )

    [
7] => Array // este es el resultado que deseo de sucursal2
        
(
            [
sucursal] => Sucursal2
            
[servicios] => Array
                (
                    [
0] => Luz
                    
[1] => Cable
                    
[2] => Agua
                    
[3] => Colegiatura
                    
[4] => Telefono
                
)

        )


Esta parte del codigo es la que construye $newArray:
la verdad no se que mas hacer ya estube intentando comprender tu codigo pero no encuentro como aplicarlo aqui.


Código PHP:
while($row mysql_fetch_assoc($resulta)){
          
          
$ultsucursal=$row['sucursal'];   
          
           
//buscando resultados repetidos
           
if(array_search($row['servicios'],$servicios)=== false){
            
$servicios[] = $row['servicios'];            
           }
           
           
$newArray[]=array('sucursal'=>$ultsucursal,'servicios'=>$servicios);
          
                   
         }
//fin de while 

Última edición por sagitariosTheBest; 10/08/2010 a las 12:05
  #23 (permalink)  
Antiguo 10/08/2010, 12:00
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Ayuda a imprimir una sola vez registro de bd

bueno, en ese caso regalame el script de la creación y poblado de la bd, y reviso el asunto
saludos
__________________
"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
  #24 (permalink)  
Antiguo 10/08/2010, 13:13
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Ayuda a imprimir una sola vez registro de bd

@sagitariosTheBest en mi ultimo post solucione ese problema, si te das cuenta no es el mismo código que te mande originalmente, al final ya no se repiten las sucursales, hechale un ojo
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #25 (permalink)  
Antiguo 10/08/2010, 13:31
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Ayuda a imprimir una sola vez registro de bd

hola again

sagitariosTheBest, el código que te muestra Nemutagk es bastante
parecido a lo que tengo yo en el segundo link, así que tomate el tiempo
para revisar ambos, y verás que ya tienes la solución allí, pero tanto Nemutagk y yo te lo mencionamos

Cita:
"es bueno para estos casos que agregues
el script de la bd"
saludos
__________________
"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
  #26 (permalink)  
Antiguo 10/08/2010, 14:08
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 11 meses
Puntos: 2
Pregunta Respuesta: Ayuda a imprimir una sola vez registro de bd

Hola la verdad les agradeceria de todos corazon que me ayudaran ya la vedad por mas que le di vueltas al asunto pues ya no si si tengo la solucion en mis narises y te les doy gracias siceras a los 3 que me an respondido son geniales.

mira script de dbprueba:

Cita:
/*
MySQL Backup
Source Server Version: 5.1.49
Source Database: dbprueba
Date: 10/08/2010 17:20:07
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `tblestado`
-- ----------------------------
DROP TABLE IF EXISTS `tblestado`;
CREATE TABLE `tblestado` (
`id_estado` int(11) NOT NULL AUTO_INCREMENT,
`nombre` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id_estado`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

-- ----------------------------
-- Table structure for `tblmunicipio`
-- ----------------------------
DROP TABLE IF EXISTS `tblmunicipio`;
CREATE TABLE `tblmunicipio` (
`id_municipio` int(11) NOT NULL AUTO_INCREMENT,
`nombre` varchar(60) DEFAULT NULL,
`id_estado` int(11) DEFAULT NULL,
PRIMARY KEY (`id_municipio`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;

-- ----------------------------
-- Table structure for `tblservicio`
-- ----------------------------
DROP TABLE IF EXISTS `tblservicio`;
CREATE TABLE `tblservicio` (
`id_servicio` int(11) NOT NULL AUTO_INCREMENT,
`servicios` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id_servicio`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

-- ----------------------------
-- Table structure for `tblserxsuc`
-- ----------------------------
DROP TABLE IF EXISTS `tblserxsuc`;
CREATE TABLE `tblserxsuc` (
`id_servicio` int(11) NOT NULL,
`id_sucursal` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- ----------------------------
-- Table structure for `tblsucursal`
-- ----------------------------
DROP TABLE IF EXISTS `tblsucursal`;
CREATE TABLE `tblsucursal` (
`id_sucursal` int(11) NOT NULL AUTO_INCREMENT,
`sucursal` varchar(50) DEFAULT NULL,
`direccion` varchar(50) DEFAULT NULL,
`colonia` varchar(50) DEFAULT NULL,
`id_municipio` int(11) DEFAULT NULL,
PRIMARY KEY (`id_sucursal`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;

-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `tblestado` VALUES ('1','ALguno'), ('2','ALguno'), ('3','ALguno'), ('4','ALguno');
INSERT INTO `tblmunicipio` VALUES ('1','ALguno','1'), ('2','ALguno','1'), ('3','ALguno','1'), ('4','ALguno','2'), ('5','ALguno','2'), ('6','ALguno','3'), ('7','ALguno','4');
INSERT INTO `tblservicio` VALUES ('1','Uno'), ('2','dos'), ('3','tre'), ('4','cuatro'), ('5','cindo'), ('6','seis');
INSERT INTO `tblserxsuc` VALUES ('1','1'), ('2','1'), ('3','1'), ('4','1'), ('5','1'), ('1','5'), ('2','5'), ('3','5'), ('1','3'), ('2','3'), ('3','3'), ('4','3'), ('1','2'), ('2','2'), ('3','2'), ('6','2');
INSERT INTO `tblsucursal` VALUES ('1','Sucursal1','ALguno','Zona Centro','1'), ('2','Sucursal3','ALguno','Zona Centro','2'), ('3','sucursal4','ALguno','ZOna centro','3'), ('4','Sucursal5','ALguno','Zona centro','3'), ('5','Sucursal2','ALguno','Zona centro','1');
el query que uso:
Cita:
select sucursal,direccion,colonia,servicios from tblsucursal INNER JOIN tblserxSuc on tblsucursal.id_sucursal = tblserxsuc.id_sucursal
INNER JOIN tblservicio on tblservicio.id_servicio = tblserxsuc.id_servicio
where tblsucursal.id_municipio=1

y el codigo la vedad ya hice revolturas ya nose que hice ya tengo bastante tiempo tratando esto pero no doy con la solucion nemutagk muchas gracias por todo. la vedad si n ti no huybiera comprendido muchas cosas. y morti prgramador muchas gracias tambien por molestarte en revisar mis post

Última edición por sagitariosTheBest; 10/08/2010 a las 16:22
  #27 (permalink)  
Antiguo 10/08/2010, 14:17
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Ayuda a imprimir una sola vez registro de bd

Según las pruebas que hice con mi código funciona, aunque no se si los ultimos servicios de la sucursal 2 están completos, porque solo muestra 2, te dejo el código

Actualización 2: viendo detenidamente las tablas veo que no ingresaba el primer servicio por lo cual faltaba siempre 1 de los servicios, aquí dejo el código final
Código PHP:
Ver original
  1. <?php
  2. function search_in_array($search,$array) {
  3.     $count = 0;
  4.     foreach($array as $item) {
  5.         if ($item['sucursal'] == $search) {
  6.             return $count;
  7.         }
  8.         $count++;
  9.     }
  10.  
  11.     return false;
  12. }
  13.  
  14. $conexion = mysql_connect('localhost','root','');
  15. mysql_select_db('temporal',$conexion);
  16.  
  17. $sql = 'select sucursal,direccion,colonia,servicios from tblsucursal INNER JOIN tblserxsuc on tblsucursal.id_sucursal = tblserxsuc.id_sucursal
  18. INNER JOIN tblservicio on tblservicio.id_servicio = tblserxsuc.id_servicio
  19. where tblsucursal.id_municipio=1';
  20.  
  21. $query = mysql_query($sql,$conexion) or die(mysql_error());
  22.  
  23. $newArray = array();
  24. $numItems = 0;
  25. while($item = mysql_fetch_assoc($query)) {
  26.     $keyArray = search_in_array($item['sucursal'],$newArray);
  27.         if ($keyArray === false) {
  28.             $newArray[$numItems]['sucursal'] = $item['sucursal'];
  29.             $newArray[$numItems]['direccion'] = $item['direccion'];
  30.             $newArray[$numItems]['colonia'] = $item['colonia'];
  31.             $newArray[$numItems]['servicios'][] = $item['servicios'];
  32.  
  33.         $numItems++;
  34.         }else {
  35.             $newArray[$keyArray]['servicios'][] = $item['servicios'];
  36.         }
  37. }
  38.  
  39. echo '<pre>';
  40. var_dump($newArray);
  41. echo '</pre>';
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Última edición por Nemutagk; 10/08/2010 a las 14:30
  #28 (permalink)  
Antiguo 10/08/2010, 14:39
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 11 meses
Puntos: 2
Respuesta: Ayuda a imprimir una sola vez registro de bd

la sucursal 2 tiene solo asignado 3 servicios hay una tabla que se llama sexsuc y ahi estan los ids donde asigno los servicios para las sucursales eneste caso solo tomos sucursal1 y sucursal2 por que esas pertenecen al mismo municipio
  #29 (permalink)  
Antiguo 10/08/2010, 14:45
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Ayuda a imprimir una sola vez registro de bd

Si ya quedo, en el post anterior, no me percate de que no estaba guardando el primer servicio que entregaba la DB, por eso siempre faltaba 1 de los servicios, pero ya lo solucione...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #30 (permalink)  
Antiguo 10/08/2010, 15:45
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 11 meses
Puntos: 2
Respuesta: Ayuda a imprimir una sola vez registro de bd

Funciona de lujo es justo lo que estaba buscando muchisisismas gracias nemutagk de verada muchas gracias DIOS te lo pague con mas conocimientos. muchas gracias.


tambien te agradesco mortiprogramador por responder y ayudarme muchas gracias es bueno que exista este tipo de foros gracias

Etiquetas: bd, registro
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 13:09.