Foros del Web » Programando para Internet » PHP »

Largo y difícil. Separar datos segun otros datos.

Estas en el tema de Largo y difícil. Separar datos segun otros datos. en el foro de PHP en Foros del Web. Hola. Esto no es muy fácil de leer, pero intentaré explicarlo para alivianarlo. Tengo 3 tablas: datos, padres y matrimonios. Con ellas, hago unas consultas ...
  #1 (permalink)  
Antiguo 13/10/2006, 12:31
Avatar de solecoza  
Fecha de Ingreso: julio-2006
Mensajes: 126
Antigüedad: 17 años, 9 meses
Puntos: 0
Desacuerdo Largo y difícil. Separar datos segun otros datos.

Hola.
Esto no es muy fácil de leer, pero intentaré explicarlo para alivianarlo.
Tengo 3 tablas: datos, padres y matrimonios.
Con ellas, hago unas consultas que me permiten saber todo sobre alguien: sus datos, sus hijos, sus padres, y cuantas veces se casó, etc.

Mi problema es: Con lo que pego acá abajo logro que me salga bien la cantidad de matrimonios, y sus respectivos conyugues.Dentro de cada matrimonio yo quiero listar los respectivos hijos. Mi problema es: tal como está este código lo que me sale es:

Persona: SOLEDAD GARCIA
Casado con:
Primer matrimonio: PEPE GONZALEZ
Hijos: JUAN
JOSE
MARIA
Segundo matrimonio: JORGE PEREZ
Hijos:

El tema es: Juan es hijo del primer matrimonio, y Jose y Maria del segundo.
¿Se entiende?

Mas abajo pongo las consultas.
GRACIAS AL QUE PUEDA AYUDARME.


Código PHP:
 if (mysql_num_rows($conyugue) > 0){ 
    if (
mysql_num_rows($conyugue) == 1){ //un solo matrimonio
       
    
$id $row['id'];
    
$apellido $row['apellido'];
    
$fena $row['fena'];
    
$luna $row['luna'];
    
$femu $row['femu'];
    
$lumu $row['lumu'];
    
    echo 
"<font class=Estilo1>Casado con: </font>";
    echo 
"<a class=links href=\"detalle.php?id=".$id."\">".$apellido."</a></br>"
     if (
$fena<>""){
    echo 
"<font class=Estilo2>Nacido el ".$fena." en ".$luna."</br></font>";
     }
     if (
$femu<>""){
    echo 
"<font class=Estilo2>Fallecido el ".$femu." en ".$lumu."</br></font>";
     }
     if (
mysql_num_rows($hijos) > 0){ //hijos del matrimonio
    
    
echo "<font class=Estilo1>Hijos: </font>";
    echo 
"</p>";
    while(
$row mysql_fetch_array($hijos)){ 
    
$id $row['id'];
    
$apellido $row['apellido'];
    
$matrimonio $row['mrin'];
    
$padres $row['mrinpadres'];
    
$fena $row['fena'];
    
$luna $row['luna'];
    
$femu $row['femu'];
    
$lumu $row['lumu'];

     echo 
"<a class=links href=\"detalle.php?id=".$id."&matrimonio=".$matrimonio."&padres=".$padres."\">".$apellido."</a></br>"
     if (
$fena<>""){
     echo 
"<font class=Estilo2>Nacido el: ".$fena." en ".$luna."</br></font>";
     }
     if (
$femu<>""){
     echo 
"<font class=Estilo2>Fallecido el: ".$femu." en ".$lumu."</br></font>";
     }
    } 
//mientras haya hijos
    
// SI TIENEN HIJOS
    
}//fin UN MATRIMONIO
    
    
else{ //muchos matrimonios
    
$i "1";
     echo 
"<font class=Estilo1>Casado con: </font>";
     echo 
"</p>";
  while(
$row mysql_fetch_array($conyugue)){ 
  
    
$id $row['id'];
    
$apellido $row['apellido'];
    
$fena $row['fena'];
    
$luna $row['luna'];
    
$femu $row['femu'];
    
$lumu $row['lumu'];
     
     echo 
"<font class=Estilo1>Matrimonio número ".$i.": </br></font>";
     echo 
"<a class=links href=\"detalle.php?id=".$id."\">".$apellido."</a></br>"
     if (
$fena<>""){
     echo 
"<font class=Estilo2>Nacido el ".$fena." en ".$luna."</br></font>";
     }
     if (
$femu<>""){
     echo 
"<font class=Estilo2>Fallecido el ".$femu." en ".$lumu."</br></font>";
     echo 
"</p>";
     }
$i++;
     echo 
"</p>";

  if (
mysql_num_rows($hijos) > ){ //hijos de cada matrimonio
    
    
echo "<font class=Estilo1>Hijos: </font>";
    echo 
"</p>";
  while(
$row mysql_fetch_array($hijos) ){ 
    
$id $row['id'];
    
$apellido $row['apellido'];
    
$fena $row['fena'];
    
$luna $row['luna'];
    
$femu $row['femu'];
    
$lumu $row['lumu'];

     echo 
"<a class=links href=\"detalle.php?id=".$id."\">".$apellido."</a></br>"
     if (
$fena<>""){
     echo 
"<font class=Estilo2>Nacido el: ".$fena." en ".$luna."</br></font>";
     }
     if (
$femu<>""){
     echo 
"<font class=Estilo2>Fallecido el: ".$femu." en ".$lumu."</br></font>";
     }

//para cada hijo
echo "</p>";
//si tienen hijos
//fin mientras haya matrimonios
//fin para el que tenga muchos matrimonios
} else { 
   echo 
"<font class=Estilo1>No se encontró cónyugue de esta persona.</font>"
   echo 
"</p>"
Código PHP:
//persona
    
$query4"SELECT distinct * FROM datos WHERE (id=$id)";
//conyugue
       
$query="select distinct * from datos p inner join matrimonios m on p.id=m.id where (m.id<>$id) AND m.mrin IN(select mrin from matrimonios where id=$id and mrin<>0)";
//hijos
     
$query2="SELECT distinct * FROM datos p inner join padres pa on p.id=pa.id WHERE (mrinpadres IN (SELECT mrin FROM matrimonios where id=$id)) AND (mrinpadres <>0)"
Otra cosita: Como se pone un echo de un tab en php?
  #2 (permalink)  
Antiguo 13/10/2006, 13:10
Avatar de seik!  
Fecha de Ingreso: mayo-2006
Mensajes: 492
Antigüedad: 17 años, 10 meses
Puntos: 6
De acuerdo mmm!

por los pocos datos k entregaste creo k necesitas relacionar al hijo segun al matrimonio k corresponda... talvez este mal normalizada tu base datos... rebisa eso

por que dentro de tus consultas deberias poner

traer hijos cuando matrimonio sea igual a algo... es la idea, ahora hacelo en sql...
talvez necesites una tabla adicional
__________________
sEIK! -Chile-
Analista Programador.
  #3 (permalink)  
Antiguo 13/10/2006, 13:50
Avatar de solecoza  
Fecha de Ingreso: julio-2006
Mensajes: 126
Antigüedad: 17 años, 9 meses
Puntos: 0
Claro, entiendo la lógica, pero no me sale como aplicarla al caso. Creo que ya veo el código nublado porque le di muchas vueltas.....viste cuando te trabás?!?!?
Por eso recurrí al foro.
Gracias!
  #4 (permalink)  
Antiguo 13/10/2006, 14:50
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 4 meses
Puntos: 4
Checa este ejemplo a ver si te da algunas luces:

Código PHP:
<?php
$conyugue2 
= array ( 'ALEJANDRA' => array ( 'ERIK' => array ('Ian Leonardo'),
                                            
'FRANCISCO' => array ( 'Pepe''Daniela' ),
                                            
'IAN'),
                     
'MARTHA' => array ( 'ERNESTO',
                                         
'JUAN' => array ( 'Camila''Jessyca''Evelin' ),
                                         
'PEDRO'),
                     
'ESTELA' => array ( 'PITER' => array ( 'Isrrael''Karen' )
                                       )
                   );

foreach ( 
$conyugue2 as $clave => $valor )
{
   echo 
"<ul>Persona: ".$clave."<br/>Casado con:<br>"// Mostramos a la pareja inestable

   
foreach ( $valor as $key => $value )
   {
      if ( 
is_array $value ) ) // tiene hijos con esta pareja
      
{
         echo 
"<li>".$key;
         echo 
"<ol>";

         foreach ( 
$value as $padres => $hijos )
         {
            echo 
"<li>".$hijos;
         }

         echo 
"</ol>";
         continue;
      }

      echo 
"<li>".$value// si no tiene hijos solo mostramos el nombre de su pareja
   
}

   echo 
"</ul>";
}
?>
Checalo, estudialo y modificalo para que en lugar de que aparezcan estos datos que puse aparezcan los reales. Suerte
  #5 (permalink)  
Antiguo 13/10/2006, 16:06
Avatar de solecoza  
Fecha de Ingreso: julio-2006
Mensajes: 126
Antigüedad: 17 años, 9 meses
Puntos: 0
Esta noche lo voy a probar!! Primero lo voy a leer bien.
Miles de gracias de antemano!
  #6 (permalink)  
Antiguo 14/10/2006, 23:01
Avatar de solecoza  
Fecha de Ingreso: julio-2006
Mensajes: 126
Antigüedad: 17 años, 9 meses
Puntos: 0
Bueno, estoy segura de que tu código es buenisimo pero a mí no me anda....nunca entendí ni entenderé los FOREACH!
Voy a pastear mi codigo completo, y un print de la pantalla al ejecutarlo para que entiendan mejor todo.
CAMBIE A DOS TABLAS. Una con los datos generales, y otra con ID, MRIN(id de matrimonio vendría a ser) y MRINPADRES (sería id de matrimonio de los padres).
Si algun iluminado entiende como separar los hijos segun sus papás....le mando un regalo!!!!!!!!!!!!!!!!
(Como verán en la imagen, el ultimo hijo que lista en matrimonio 1, es en realidad hijo del matrimonio 2).

Consultas: (el $id lo recibo por un form de busqueda)

Código PHP:
//persona
    
$query4"SELECT distinct * FROM datos WHERE (id=$id)";
//conyugue
       
$query "SELECT * FROM datos d INNER JOIN matrimonios m on (d.id=m.id) WHERE m.mrin IN(SELECT mrin FROM matrimonios WHERE id=$id AND mrin<>0) AND d.id<>$id"
//hijos
     
$query2 "SELECT distinct * FROM datos d INNER JOIN matrimonios m ON d.id=m.id WHERE mrinpadres IN(SELECT mrin FROM matrimonios WHERE id=$id AND mrin<>0) AND d.id<>$id"

$conyugue mysql_query($query) or die (mysql_error()); 
$persona mysql_query($query4) or die (mysql_error()); 
$hijos mysql_query($query2) or die (mysql_error()); 

Código:
Código PHP:
echo "<table class=tabla>";
    echo 
"<tr><td bgcolor=#d1d0df>";
 if (
mysql_num_rows($persona) > 0){ 

    echo 
"<font class=Estilo1>Persona seleccionada: </font>";
   
  if(
$row mysql_fetch_array($persona)){ 
    
$name $row['apellido'];
    
$fena $row['fena'];
    
$luna $row['luna'];
    
$femu $row['femu'];
    
$lumu $row['lumu'];

     if (
$name<>""){
     echo 
"<font class=Estilo1>".$name."</br></font>";
     }
     if (
$fena<>""){
     echo 
"<font class=Estilo2>Nacido el ".$fena." en ".$luna."</br></font>";
     }
     if (
$femu<>""){
     echo 
"<font class=Estilo2>Fallecido el ".$femu." en ".$lumu."</br></font>";
     }

  } 
} else { 
   echo 
"<font class=Estilo1>No se encontró información de esta persona.</font>"
   echo 
"</p>";


echo 
"</td></tr>";
  echo 
"</br>";
  
//fin persona

//comienzo tabla conyugues
    
echo "<table class=tabla>";
    echo 
"<tr><td bgcolor=#D7D6E0>";
 if (
mysql_num_rows($conyugue) > 0){ 
    if (
mysql_num_rows($conyugue) == 1){
    while(
$row mysql_fetch_array($conyugue)){  //un solo matrimonio
       
    
$id $row['id'];
    
$apellido $row['apellido'];
    
$fena $row['fena'];
    
$luna $row['luna'];
    
$femu $row['femu'];
    
$lumu $row['lumu'];
    
    echo 
"<font class=Estilo1>Casado con: </font>";
    echo 
"<a class=links href=\"detalle.php?id=".$id."\">".$apellido."</a></br>"
     if (
$fena<>""){
    echo 
"<font class=Estilo2>Nacido el ".$fena." en ".$luna."</br></font>";
     }
     if (
$femu<>""){
    echo 
"<font class=Estilo2>Fallecido el ".$femu." en ".$lumu."</br></font>";
     }
     
    if (
mysql_num_rows($hijos) > 0){ //hijos del matrimonio
    
    
echo "<font class=Estilo1>Hijos: </font>";
    echo 
"</p>";
    while(
$row mysql_fetch_array($hijos)){ 
    
$id $row['id'];
    
$apellido $row['apellido'];
    
$fena $row['fena'];
    
$luna $row['luna'];
    
$femu $row['femu'];
    
$lumu $row['lumu'];

     echo 
"<a class=links href=\"detalle.php?id=".$id."\">".$apellido."</a></br>";
     if (
$fena<>""){
     echo 
"<font class=Estilo2>Nacido el: ".$fena." en ".$luna."</br></font>";
     }
     if (
$femu<>""){
     echo 
"<font class=Estilo2>Fallecido el: ".$femu." en ".$lumu."</br></font>";
     }
    } 
//mientras haya hijos
    
}else{echo "No se encontraron hijos para esta matrimonio";} // SI TIENEN HIJOS
}//fin UN MATRIMONIO

$numero=count($conyugue);
//MUCHOS MATRIMONIOS    
    
}else{ 
    
$i "1";
     echo 
"<font class=Estilo1>Casado con: </font>";
     echo 
"</p>";
  while(
$row mysql_fetch_array($conyugue)){ 
  
    
$id $row['id'];
    
$apellido $row['apellido'];
    
$fena $row['fena'];
    
$luna $row['luna'];
    
$femu $row['femu'];
    
$lumu $row['lumu'];
    
$mrin $row['mrin'];
     
     echo 
"<font class=Estilo1>Matrimonio número ".$i.": </br></font>";
     echo 
"<a class=links href=\"detalle.php?id=".$id."\">".$apellido."</a></br>"
     if (
$fena<>""){
     echo 
"<font class=Estilo2>Nacido el ".$fena." en ".$luna."</br></font>";
     }
     if (
$femu<>""){
     echo 
"<font class=Estilo2>Fallecido el ".$femu." en ".$lumu."</br></font>";
     echo 
"</p>";
     }
$i++;
     echo 
"</p>";

  if (
mysql_num_rows($hijos) > ){ //hijos de cada matrimonio
    
    
echo "<font class=Estilo1>Hijos: </font>";
    echo 
"</p>";
 
  while(
$row mysql_fetch_array($hijos) ){ 
    
$id $row['id'];
    
$apellido $row['apellido'];
    
$fena $row['fena'];
    
$luna $row['luna'];
    
$femu $row['femu'];
    
$lumu $row['lumu'];

      echo 
"<a class=links href=\"detalle.php?id=".$id."\">".$apellido."</a></br>"
     if (
$fena<>""){
     echo 
"<font class=Estilo2>Nacido el: ".$fena." en ".$luna."</br></font>";
     }
     if (
$femu<>""){
     echo 
"<font class=Estilo2>Fallecido el: ".$femu." en ".$lumu."</br></font>";
     }

}
  
//para cada hijo
echo "</p>";
//si tienen hijos
//fin mientras haya matrimonios
//fin para el que tenga muchos matrimonios
//fin "si esta casado"
 
else { 
   echo 
"<font class=Estilo1>No se encontró cónyugue de esta persona.</font>"
   echo 
"</p>";
    } 
echo 
"</td></tr>";

     echo 
"</p>";
   echo 
"</table>"
  echo 
"</br>";

   echo 
"<font class=Estilo1>Para buscar otro apellido cliqueá aquí</font></br><a class=links href=buscar.php>Nueva búsqueda</a></br>"
Salida de datos con este código:

  #7 (permalink)  
Antiguo 16/10/2006, 07:01
Avatar de solecoza  
Fecha de Ingreso: julio-2006
Mensajes: 126
Antigüedad: 17 años, 9 meses
Puntos: 0
PORFAVORRRRRRRRRRRRR.....si alguien tiene un rato para leer este codigo....
Necesito saber como separar esos datos.
Se me ocurrió comparando apellidos....pero no funciona....
YA NO SE QUE HACER.
GRACIAS!
  #8 (permalink)  
Antiguo 16/10/2006, 09:00
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 4 meses
Puntos: 4
Sólo una pregunta, en tu código:

Código PHP:
<?php
//persona 
   
$query4"SELECT distinct * FROM datos WHERE ( id = $id )";
   
$persona mysql_query$query4 ) or die ( mysql_error() );
//conyugue 
   
$query "SELECT * FROM datos d INNER JOIN matrimonios m on (d.id=m.id) WHERE m.mrin IN(SELECT mrin FROM matrimonios WHERE id=$id AND mrin<>0) AND d.id<>$id";
   
$conyugue mysql_query$query ) or die ( mysql_error() );
//hijos 
   
$query2 "SELECT distinct * FROM datos d INNER JOIN matrimonios m ON d.id=m.id WHERE mrinpadres IN(SELECT mrin FROM matrimonios WHERE id=$id AND mrin<>0) AND d.id<>$id";
   
$hijos mysql_query$query2 ) or die ( mysql_error() );

echo 
"<table class=\"tabla\">";
echo 
"<tr><td bgcolor=\"#d1d0df\">"

if ( 
mysql_num_rows $persona ) > )
{
   echo 
"<font class=\"Estilo1\">Persona seleccionada: </font>"
    
   
$row mysql_fetch_array$persona );

   
// datos generales de la persona
   
$name $row['apellido']; // nombre de la persona
   
$fena $row['fena']; // fecha de nacimiento
   
$luna $row['luna']; // lugar de nacimiento
   
$femu $row['femu']; // fecha de muerte
   
$lumu $row['lumu']; // lugar de muerte

   
if ( empty( $name ) )
   {
      echo 
"<font class=\"Estilo1\">".$name."</br></font>";
   } 
   if ( empty( 
$fena ) )
   {
      echo 
"<font class=\"Estilo2\">Nacido el ".$fena." en ".$luna."</br></font>";
   } 
   if ( empty( 
$femu ) )
   {
      echo 
"<font class=\"Estilo2\">Fallecido el ".$femu." en ".$lumu."</br></font>";
   }
}
else
{  
   echo 
"<font class=\"Estilo1\">No se encontró información de esta persona.</font><p>";
   exit; 
// no mostramos la tabla de sus conyugues e hijos
}

echo 
"</td></tr>";
echo 
"</br>";
   
//fin persona
//comienzo tabla conyugues

echo "<table class=\"tabla\">";
echo 
"<tr><td bgcolor=\"#D7D6E0\">";

if ( 
mysql_num_rows$conyugue ) > )
{
   if ( 
mysql_num_rows$conyugue ) == //un solo matrimonio
   
{
      
// datos generales de conyugue
      
$id $row['id']; // id de conyugue
      
$apellido $row['apellido']; // apellido de conyugue
      
$fena $row['fena']; // fecha de nacimiento de conyugue
      
$luna $row['luna']; // lugar de nacimiento de conyugue
      
$femu $row['femu']; // fecha de muerte de conyugue
      
$lumu $row['lumu']; // lugar de muerte de conyugue
     
      
echo "<font class=\"Estilo1\">Casado con: </font>"
      echo 
"<a class=\"links\" href=\"detalle.php?id=".$id."\">".$apellido."</a></br>";

      if ( empty( 
$fena ) )
      {
         echo 
"<font class=\"Estilo2\">Nacido el ".$fena." en ".$luna."</br></font>"
      }
      if ( empty( 
$femu ) )
      {
         echo 
"<font class=\"Estilo2\">Fallecido el ".$femu." en ".$lumu."</br></font>";
      }
      
      if ( 
mysql_num_rows$hijos ) > // hijos del matrimonio
      
{
         echo 
"<font class=\"Estilo1\">Hijos: </font><p>";
         while ( 
$row mysql_fetch_array $hijos ) )
         {
            
$id $row['id']; // id hijo
            
$apellido $row['apellido']; // apellidos hijo
            
$fena $row['fena']; // fecha de nacimiento hijo
            
$luna $row['luna']; // lugar de nacimiento hijo
            
$femu $row['femu']; // fecha de muerte hijo
            
$lumu $row['lumu']; // lugar de muerte hijo
            
echo "<a class=\"links\" href=\"detalle.php?id=".$id."\">".$apellido."</a></br>";

            if ( empty( 
$fena ) )
            {
               echo 
"<font class=\"Estilo2\">Nacido el: ".$fena." en ".$luna."</br></font>";
            }
            if ( empty( 
$femu ) )
            {
               echo 
"<font class=\"Estilo2\">Fallecido el: ".$femu." en ".$lumu."</br></font>";
            }
         }
      }
      else
      {
         echo 
"No se encontraron hijos para esta matrimonio";
      }
   }
   else
   {
      
$numero count$conyugue ); // MUCHOS MATRIMONIOS
      
$i "1"// contador de matrimonio
      
echo "<font class=\"Estilo1\">Casado con: </font><p>";
      while ( 
$row mysql_fetch_array $conyugue ) )
      {
         
$id $row['id']; // id de conyugue
         
$apellido $row['apellido']; // apellido de conyugue
         
$fena $row['fena']; // fecha de nacimiento de conyugue
         
$luna $row['luna']; // lugar de nacimiento de conyugue
         
$femu $row['femu']; // fecha de muerte de conyugue
         
$lumu $row['lumu']; // lugar de muerte de conyugue
      
         
echo "<font class=\"Estilo1\">Matrimonio número ".$i.": </br></font>";
         echo 
"<a class=\"links\" href=\"detalle.php?id=".$id."\">".$apellido."</a></br>";

         if ( empty( 
$fena ) )
         {
            echo 
"<font class=\"Estilo2\">Nacido el ".$fena." en ".$luna."</br></font>";
         } 
         if ( empty( 
$femu ) )
         {
            echo 
"<font class=\"Estilo2\">Fallecido el ".$femu." en ".$lumu."</br></font><p>";
         }

         
$i++; 
         echo 
"<p>"

         if ( 
mysql_num_rows$hijos ) > //hijos de cada matrimonio
         
{
            echo 
"<font class=Estilo1>Hijos: </font><p>"
  
            while ( 
$row2 mysql_fetch_array$hijos ) )
            {
               
$id2 $row['id']; // id hijo
               
$apellido2 $row['apellido']; // apellidos hijo
               
$fena2 $row['fena']; // fecha de nacimiento hijo
               
$luna2 $row['luna']; // lugar de nacimiento hijo
               
$femu2 $row['femu']; // fecha de muerte hijo
               
$lumu2 $row['lumu']; // lugar de muerte hijo

               
echo "<a class=\"links\" href=\"detalle.php?id=".$id."\">".$apellido2."</a></br>";

               if ( empty( 
$fena ) )
               {
                  echo 
"<font class=\"Estilo2\">Nacido el: ".$fena2." en ".$luna2."</br></font>";
               } 
               if ( empty( 
$femu ) )
               {
                  echo 
"<font class=\"Estilo2\">Fallecido el: ".$femu2." en ".$lumu2."</br></font>";
               }
            }

            echo 
"<p>";
         }
      }
   }
}
else
{
   echo 
"<font class=\"Estilo1\">No se encontró cónyugue de esta persona.</font><p>";
}

echo 
"</td></tr><p></table></br>";
echo 
"<font class=\"Estilo1\">Para buscar otro apellido cliqueá aquí</font></br><a class=\"links\" href=\"buscar.php\">Nueva búsqueda</a></br>";
?>
¿Donde estas colocando la comparacion del padre con el hijo?, es decir, antes de hacer el bucle:

while ( $row = mysql_fetch_array( $hijos ) )

deverías de poner un condicional donde le digas que imprima los hijos que correspondan con el apellido paterno del conyugue que estas imprimiendo. Algo parecido a esto:

Código PHP:
// suponiendo que los apellidos solo tienen dos palabras
$apellidos_conyugue explode " "$apellido );
$apellidos_hijos exoplode " "$apellido2 );
if (  
$apellidos_conyugue[0] == $apellidos_hijos[0] )
{
   
// aquí adentro pones todo el código del while

Te puse entre comentarios que esto te funciona siempre y cuando el conyugue tenga los apellidos separados por un sólo espacio, ejemplo:

Torres Zavala // el apellido paterno a comparar será Torres

Pero si el apellido contiene más espacios no te va a funcionar, mira el sig. ejemplo:

De la Torre Gutierres

El apellido paterno contiene varios espacios (De la Torre) y en el if va intentar comparar sólo (De). Así que lo que te recomendaría para no tener estos problemas es que guardes los apellidos en campos separados algo así como apellidopaterno, apellidomaterno.

Bueno espero haberme dado a entender y esto te sirva por lo menos para darte una idea. Suerte
  #9 (permalink)  
Antiguo 16/10/2006, 09:38
Avatar de solecoza  
Fecha de Ingreso: julio-2006
Mensajes: 126
Antigüedad: 17 años, 9 meses
Puntos: 0
Claro, si sería lo perfecto...pero....
Los datos salen de un programa de genealogía, que ya contiene 100.000 registros. y salen asi: APELLIDO = nombres + apellidos.
Por lo cual yo intentaba pensar cooooomo separar los hijos por sus padres y se me hacía imposible!!!
Voy a preguntar si se pueden separar los datos en NOMBRES APELLIDO MATERNO y APELLIDO PATERNO. Pero tambien hay algunas personas con doble apellido paterno, o doble materno...o sea....ya no se me ocurre que mas idear para poder lograr esto!!!!!
  #10 (permalink)  
Antiguo 16/10/2006, 13:57
Avatar de solecoza  
Fecha de Ingreso: julio-2006
Mensajes: 126
Antigüedad: 17 años, 9 meses
Puntos: 0
Bueno al final no se podian separar....pero....gracias a tu ayuda ERIKFRANCISCO logré que una parte ya salga bien!!! Tu EXPLODE me vino de diez.
Los hijos del primer matrimonio me los lista perfectos bajo el padre correcto, ahora el error es que los demas hijos no salen bajo el segundo matrimonio.
Seguramente sea algun error del while, pero no logro detectarlo.
Ayuditas???? Paso el nuevo código.

Código PHP:
//MUCHOS MATRIMONIOS    
    
}else{ 
    
$i "1";
     echo 
"<font class=Estilo1>Casado con: </font>";
     echo 
"</p>";
          
    while(
$row mysql_fetch_array($conyugue)){ 
   
    
$id $row['id'];
    
$apellido $row['apellido'];
    
$apellidocon explode " "$apellido); 
    
$fena $row['fena'];
    
$luna $row['luna'];
    
$femu $row['femu'];
    
$lumu $row['lumu'];
    
$mrin $row['mrin'];
     echo 
"<font class=Estilo1>Matrimonio número ".$i.": </br></font>";
     echo 
"<a class=links href=\"detalle.php?id=".$id."\">".$apellido."</a></br>"
     if (
$fena<>""){
     echo 
"<font class=Estilo2>Nacido el ".$fena." en ".$luna."</br></font>";
     }
     if (
$femu<>""){
     echo 
"<font class=Estilo2>Fallecido el ".$femu." en ".$lumu."</br></font>";
     echo 
"</p>";
     }
$i++;
     echo 
"</p>";

  if (
mysql_num_rows($hijos) > ){ //hijos de cada matrimonio
    
    
echo "<font class=Estilo1>Hijos: </font>";
    echo 
"</p>";
 
  while(
$row mysql_fetch_array($hijos)){ 
    
$id $row['id'];
    
$apellido $row['apellido'];
    
$fena $row['fena'];
    
$luna $row['luna'];
    
$femu $row['femu'];
    
$lumu $row['lumu'];
    
$apellidoh explode " "$apellido);

     if (  
$apellidocon[0] == $apellidoh[0] ) {
      echo 
"<a class=links href=\"detalle.php?id=".$id."\">".$apellido."</a></br>"
     if (
$fena<>""){
     echo 
"<font class=Estilo2>Nacido el: ".$fena." en ".$luna."</br></font>";
     }
     if (
$femu<>""){
     echo 
"<font class=Estilo2>Fallecido el: ".$femu." en ".$lumu."</br></font>";
     }
}
//Si son hijos de TAL matrimonio
}//para cada uno de sus hijos
echo "</p>";
}
//si la persona tiene hijos 
//fin mientras haya matrimonios (hace todos)
//fin para el que tenga muchos matrimonios
//fin "si esta casado"
 
else { 
   echo 
"<font class=Estilo1>No se encontró cónyugue de esta persona.</font>"
  #11 (permalink)  
Antiguo 17/10/2006, 10:41
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 4 meses
Puntos: 4
Bueno pues el código queda de esta manera ¿no?

Código PHP:
<?php 
//persona  
   
$query4"SELECT distinct * FROM datos WHERE ( id = $id )"
   
$persona mysql_query$query4 ) or die ( mysql_error() ); 
//conyugue  
   
$query "SELECT * FROM datos d INNER JOIN matrimonios m on (d.id=m.id) WHERE m.mrin IN(SELECT mrin FROM matrimonios WHERE id=$id AND mrin<>0) AND d.id<>$id"
   
$conyugue mysql_query$query ) or die ( mysql_error() ); 
//hijos  
   
$query2 "SELECT distinct * FROM datos d INNER JOIN matrimonios m ON d.id=m.id WHERE mrinpadres IN(SELECT mrin FROM matrimonios WHERE id=$id AND mrin<>0) AND d.id<>$id"
   
$hijos mysql_query$query2 ) or die ( mysql_error() ); 

echo 
"<table class=\"tabla\">"
echo 
"<tr><td bgcolor=\"#d1d0df\">";  

if ( 
mysql_num_rows $persona ) > 

   echo 
"<font class=\"Estilo1\">Persona seleccionada: </font>";  
     
   
$row mysql_fetch_array$persona ); 

   
// datos generales de la persona 
   
$name $row['apellido']; // nombre de la persona
   
$fena $row['fena']; // fecha de nacimiento 
   
$luna $row['luna']; // lugar de nacimiento 
   
$femu $row['femu']; // fecha de muerte 
   
$lumu $row['lumu']; // lugar de muerte 

   
if ( empty( $name ) ) 
   { 
      echo 
"<font class=\"Estilo1\">".$name."</br></font>"
   }  
   if ( empty( 
$fena ) ) 
   { 
      echo 
"<font class=\"Estilo2\">Nacido el ".$fena." en ".$luna."</br></font>"
   }  
   if ( empty( 
$femu ) ) 
   { 
      echo 
"<font class=\"Estilo2\">Fallecido el ".$femu." en ".$lumu."</br></font>"
   } 

else 
{   
   echo 
"<font class=\"Estilo1\">No se encontró información de esta persona.</font><p>"
   exit; 
// no mostramos la tabla de sus conyugues e hijos 


echo 
"</td></tr>"
echo 
"</br>"
    
//fin persona 
//comienzo tabla conyugues 

echo "<table class=\"tabla\">"
echo 
"<tr><td bgcolor=\"#D7D6E0\">"

if ( 
mysql_num_rows$conyugue ) > 

   if ( 
mysql_num_rows$conyugue ) == //un solo matrimonio 
   

      
// datos generales de conyugue 
      
$id $row['id']; // id de conyugue 
      
$apellido $row['apellido']; // apellido de conyugue
      
$fena $row['fena']; // fecha de nacimiento de conyugue 
      
$luna $row['luna']; // lugar de nacimiento de conyugue 
      
$femu $row['femu']; // fecha de muerte de conyugue 
      
$lumu $row['lumu']; // lugar de muerte de conyugue 
      
      
echo "<font class=\"Estilo1\">Casado con: </font>";  
      echo 
"<a class=\"links\" href=\"detalle.php?id=".$id."\">".$apellido."</a></br>"

      if ( empty( 
$fena ) ) 
      { 
         echo 
"<font class=\"Estilo2\">Nacido el ".$fena." en ".$luna."</br></font>";  
      } 
      if ( empty( 
$femu ) ) 
      { 
         echo 
"<font class=\"Estilo2\">Fallecido el ".$femu." en ".$lumu."</br></font>"
      } 
       
      if ( 
mysql_num_rows$hijos ) > // hijos del matrimonio 
      

         echo 
"<font class=\"Estilo1\">Hijos: </font><p>"
         while ( 
$row mysql_fetch_array $hijos ) ) 
         { 
            
$id $row['id']; // id hijo 
            
$apellido $row['apellido']; // apellidos hijo
            
$fena $row['fena']; // fecha de nacimiento hijo 
            
$luna $row['luna']; // lugar de nacimiento hijo 
            
$femu $row['femu']; // fecha de muerte hijo 
            
$lumu $row['lumu']; // lugar de muerte hijo 

            
echo "<a class=\"links\" href=\"detalle.php?id=".$id."\">".$apellido."</a></br>"

            if ( empty( 
$fena ) ) 
            { 
               echo 
"<font class=\"Estilo2\">Nacido el: ".$fena." en ".$luna."</br></font>"
            } 

            if ( empty( 
$femu ) ) 
            { 
               echo 
"<font class=\"Estilo2\">Fallecido el: ".$femu." en ".$lumu."</br></font>"
            }
         } 
      } 
      else 
      { 
         echo 
"No se encontraron hijos para esta matrimonio"
      } 
   } 
   else 
   { 
      
$numero count$conyugue ); // MUCHOS MATRIMONIOS 
      
$i "1"// contador de matrimonio 
      
echo "<font class=\"Estilo1\">Casado con: </font><p>"
      while ( 
$row mysql_fetch_array $conyugue ) ) 
      { 
         
$id $row['id']; // id de conyugue 
         
$apellido $row['apellido']; // apellido de conyugue
         
$apellido_c explode " "$apellido ); // obtenemos los apellidos del conyugue el que nos interesa es el paterno
         
$fena $row['fena']; // fecha de nacimiento de conyugue 
         
$luna $row['luna']; // lugar de nacimiento de conyugue 
         
$femu $row['femu']; // fecha de muerte de conyugue 
         
$lumu $row['lumu']; // lugar de muerte de conyugue 
       
         
echo "<font class=\"Estilo1\">Matrimonio número ".$i.": </br></font>"
         echo 
"<a class=\"links\" href=\"detalle.php?id=".$id."\">".$apellido."</a></br>"

         if ( empty( 
$fena ) ) 
         { 
            echo 
"<font class=\"Estilo2\">Nacido el ".$fena." en ".$luna."</br></font>"
         }  
         if ( empty( 
$femu ) ) 
         { 
            echo 
"<font class=\"Estilo2\">Fallecido el ".$femu." en ".$lumu."</br></font><p>"
         } 

         
$i++;  
         echo 
"<p>";  

         if ( 
mysql_num_rows$hijos ) > //hijos de cada matrimonio 
         

            echo 
"<font class=Estilo1>Hijos: </font><p>";  
   
            while ( 
$row2 mysql_fetch_array$hijos ) ) 
            { 
               
$id2 $row['id']; // id hijo 
               
$apellido2 $row['apellido']; // apellidos hijo
               
$apellido_h explode " "$apellido );// obtenemos los apellidos del(la) hijo(a) el que nos interesa es el paterno
               
$fena2 $row['fena']; // fecha de nacimiento hijo 
               
$luna2 $row['luna']; // lugar de nacimiento hijo 
               
$femu2 $row['femu']; // fecha de muerte hijo 
               
$lumu2 $row['lumu']; // lugar de muerte hijo 

               
if ( $apellido_c[0] == $apellido_h[0] )
               {
                  echo 
"<a class=\"links\" href=\"detalle.php?id=".$id."\">".$apellido2."</a></br>"

                  if ( empty( 
$fena ) ) 
                  { 
                     echo 
"<font class=\"Estilo2\">Nacido el: ".$fena2." en ".$luna2."</br></font>"
                  }  
                  if ( empty( 
$femu ) ) 
                  { 
                     echo 
"<font class=\"Estilo2\">Fallecido el: ".$femu2." en ".$lumu2."</br></font>"
                  } 
               }
            } 

            echo 
"<p>"
         } 
      } 
   } 

else 

   echo 
"<font class=\"Estilo1\">No se encontró cónyugue de esta persona.</font><p>"


echo 
"</td></tr><p></table></br>"
echo 
"<font class=\"Estilo1\">Para buscar otro apellido cliqueá aquí</font></br><a class=\"links\" href=\"buscar.php\">Nueva búsqueda</a></br>"
?>
Te aconsejo que mejor utilices empty en lugar de $campo <> "". Ahora, la condicional:

$apellido_c[0] == $apellido_h[0]

Esto te servira siempre y cuando:

* La persona sea mujer, recuerda que los apellidos del hijo son apellidopaterno apellidomaterno y en la condicional estas comparando que el apellido paterno del conyugue es igual al apellido paterno del hijo, pero si la persona es hombre no funcionara. Debes de buscar la manera de obtener el sexo de la persona para así cambiar el condicional.

$apellido_c[0] == $apellido_h[1]

* Otra observación es que en los datos generales del conyugue sólo tienes los apellidos no el nombre, acaso ¿tienes dentro del campo apellidos el nombre?; de ser así entonces no te va a dar los resultados deseados la condicional ya que probablemente estas agarrando el nombre en lugar del apellido a menos que este campo comience por estos.

Suerte

Última edición por Erikfrancisco; 17/10/2006 a las 11:12
  #12 (permalink)  
Antiguo 17/10/2006, 19:41
Avatar de solecoza  
Fecha de Ingreso: julio-2006
Mensajes: 126
Antigüedad: 17 años, 9 meses
Puntos: 0
Como siempre, gracias por tu respuesta.
El campo apellido consta de el o los apellidos, una coma, y seguidos el o los nombres.

Con el explode yo saco el primer apellido que SIEMPRE va a ser el paterno, por eso debería funcionar bien.
Si nos llevamos por el ejemplo de como anda ahora, buscando Celia Wybert, que esta casada con Luis Seeber, me trae los hijos SEEBER bajo "hijos del primer matrimonio", pero bajo segundo matrimonio no trae nada.
AL MENOS no lista mas los de los demas matrimonios bajo el primero.

El tema de que solo funcionaría si es mujer....creo que tenés razón!!!
Acabás de meterme otro problema en el medio AJAJAJAJA. Que mal.
Te juro que llevo tiempo tratando de darle la vuelta a esto y no hay forma de que salga....es frustrante!!!!!
Quizas deberia al seleccionar quien es la persona buscada, ver de que sexo es, y de ahi en mas arrancar con oooootro condicional.
¿Esto no alentará demasiado el código?

Te dejo un print de como salen los datos ahora!! (sí...buscando los matrimonios de una mujer jejeje)....como verás, en el segundo matrimonio, pasó de largo el hijo que tienen y no salió nada. La repeticion del hijo fue porke toquetee el codigo hace un rato, pero me salian ambos bien. Seeber Miguel y Seeber Tomas.

  #13 (permalink)  
Antiguo 24/10/2006, 10:06
Avatar de solecoza  
Fecha de Ingreso: julio-2006
Mensajes: 126
Antigüedad: 17 años, 9 meses
Puntos: 0
¿Nadie que me pueda dar una mano con esto?
Seguro alguien lo puede lograr. Necesito solo eso para terminar el programita.
Gracias por la ayuda.
  #14 (permalink)  
Antiguo 24/10/2006, 15:47
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 4 meses
Puntos: 4
Pues lo que ahorita se me ocurre del porque no te muestra los hijos de los siguientes matrimonios es que los apellidos no son iguales, es decir, probablemente no estan bien escritos, por ejemplo:

'Massot' == 'massot' o 'Massot' == 'Masot'

Digo podrían ser errores de dedo, deberías checar eso (que los apellidos sean iguales), para resolver el primer caso deberías cambias este if:
Código PHP:
if ( $apellido_c[0] == $apellido_h[0] ) 
Por este otro:
Código PHP:
            while ( $row2 mysql_fetch_array$hijos ) )  
            {  
               
$id2 $row['id']; // id hijo  
               
$apellido2 $row['apellido']; // apellidos hijo 
               
$apellido_h explode " "$apellido );// obtenemos los apellidos del(la) hijo(a) el que nos interesa es el paterno 
               
$fena2 $row['fena']; // fecha de nacimiento hijo  
               
$luna2 $row['luna']; // lugar de nacimiento hijo  
               
$femu2 $row['femu']; // fecha de muerte hijo  
               
$lumu2 $row['lumu']; // lugar de muerte hijo  

               
$mayus_c strtr strtoupper $apellido_c[0] ), "àáâãäåæçèéêëìíîïðñòóôõöøùüú""ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÜÚ"); 
               
$mayus_h strtr strtoupper $apellido_h[0] ), "àáâãäåæçèéêëìíîïðñòóôõöøùüú""ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÜÚ"); 

               if ( 
$mayus_c == $mayus_h 
               { 
                  echo 
"<a class=\"links\" href=\"detalle.php?id=".$id."\">".$apellido2."</a></br>";  

                  if ( !empty( 
$fena ) )  
                  {  
                     echo 
"<font class=\"Estilo2\">Nacido el: ".$fena2." en ".$luna2."</br></font>";  
                  }   
                  if ( !empty( 
$femu ) )  
                  {  
                     echo 
"<font class=\"Estilo2\">Fallecido el: ".$femu2." en ".$lumu2."</br></font>";  
                  }  
               }
            } 
Para resolver el segundo caso, no veo otra, sino corregirlo a mano. Ah, y por cierto los empty que te había puesto hay que corregirlos poniendo un cierre de signo de admiración a su costado izquierdo es decir:
Código PHP:
!empty ( $variable 
Suerte

Última edición por Erikfrancisco; 24/10/2006 a las 15:55
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 06:51.