Foros del Web » Programando para Internet » PHP »

Planteamento para uso de variables con MySql

Estas en el tema de Planteamento para uso de variables con MySql en el foro de PHP en Foros del Web. El asunto es que tengo un problema para dar con un consulta de datos de MySql, tengo una tabla: Lo que intento es que al ...
  #1 (permalink)  
Antiguo 07/07/2016, 17:07
 
Fecha de Ingreso: febrero-2016
Mensajes: 16
Antigüedad: 8 años, 9 meses
Puntos: 0
Pregunta Planteamento para uso de variables con MySql

El asunto es que tengo un problema para dar con un consulta de datos de MySql, tengo una tabla:



Lo que intento es que al momento de de buscar las depencencias por ejemplo de Lagos me despliegue todas y cada una de las ubic, pero a medida que baje por ejemplo en americas me muestre Valdez, Palace, Calle 6 que son las ubic de Americas y de Lagos, el CodUbi (FK) viene de otra tabla exclusiva de las ubic de nivel 2 y superior, ademas de igual forma Nivel (FK) viene de otra tabla donde se determina su nivel dependiendo de la cantidad de ubic que maneja, siendo 1 un terminal y siendo 10 el que mas ubic maneja.

Estoy trabajando el codigo en PHP y las cuestiones que tengo son:

1. Ese tipo de consulta la puedo manejar directamente en MySql y como seria la consulta.

2. Ese tipo de consulta la puedo hacer desde el codigo PHP para que me vaya desglosando las Ubic a medida que encuentra niveles 2 o superior y si es asi como puedo hacer.

Se que es mucho pedir pero la verdad no se me ha ocurrido forma alguna de arreglar este problema, ademas del hecho que mi programacion es un poco basica. Agradezco mucho su colaboración

Última edición por thezyrax; 07/07/2016 a las 17:43
  #2 (permalink)  
Antiguo 08/07/2016, 10:37
 
Fecha de Ingreso: julio-2010
Ubicación: La Ciudad Blanca, Mérida-Yucatán
Mensajes: 375
Antigüedad: 14 años, 4 meses
Puntos: 7
Respuesta: Planteamento para uso de variables con MySql

Creo que podrías solucionarlo con selects dependientes, busca en las FAQs del foro y en internet hay buenos ejemplos de ello.
__________________
--No todos aprendemos de la misma forma, ni a la misma velocidad---
  #3 (permalink)  
Antiguo 08/07/2016, 10:45
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: Planteamento para uso de variables con MySql

Lo que mencionas no es nada nuevo, se llama recursividad, lo puedes hacer tanto en MySQL como en PHP,

Código PHP:
Ver original
  1. function recursividad($id){
  2. $sql = "selcet *  from mitabla where codUbi = $id"
  3. $query = mysql_query($sql);
  4. while($row = mysql_fetch_array($query)){
  5.   echo $row['Codigo'].' '.$row['Ubic'].' '.$row['CodUbic'].'<br>'
  6.   recursividad($row['Codigo']);
  7. }
  8. }
  9. echo recursividad('0000');

Espero te haya servido de ayuda
  #4 (permalink)  
Antiguo 08/07/2016, 15:39
 
Fecha de Ingreso: febrero-2016
Mensajes: 16
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: Planteamento para uso de variables con MySql

Cita:
Iniciado por wilmer30 Ver Mensaje
Lo que mencionas no es nada nuevo, se llama recursividad, lo puedes hacer tanto en MySQL como en PHP...
Gracias por la ayuda, solo que me arroja valores aun fuera del criterio de busqueda, se me ocurrio hacerlo de esta forma pero igual no me arroja los valores de una buena forma

Código PHP:
$aus 1234
//Realizo la consulta
$consulta $conexion -> query("SELECT * FROM mitabla WHERE codubi = $aus");
  while (
$row $consulta -> fetch_array()){
      
$cod $row[codigo];
      
$nom $row[ubic];
      
$cal $row[codubi];
      
$pin $row[nivel];
      
//Convierto el array en una variable para buscar contenido
      
$array = array($cod$nom$cal$pin);
      
//Condiciono la busqueda de nivel 2  o superior
      
if (in_array($pin >= 2$array)) {
          
//Realizo la consulta de las ubic inferiores
          
$consulta $conexion -> query("SELECT * FROM mitabla WHERE codubi = $cod");
          while (
$row $consulta -> fetch_array()){
              
$cod $row[codigo];
              
$nom $row[ubic];
              
$cal $row[codubi];
              
$pin $row[nivel];
              
$array = array($cod$nom$cal$pin);
                 }
              
$long count($array);
              for(
$i=0$i<$long$i++)
              {
                  echo 
$array[$i];
                  echo 
"<br>";
              }
          }
      
      }
      
$long count($array);
      
//Recorro todos los elementos
      
for($i=0$i<$long$i++)
      {
      
//saco el valor de cada elemento
      
echo $array[$i];
      echo 
"<br>";
      } 
Aunque solo logro mostrar el primer valor...
  #5 (permalink)  
Antiguo 09/07/2016, 00:01
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Planteamento para uso de variables con MySql

Esto que haces aquí es totalmente incorrecto:
Código PHP:
Ver original
  1. //Condiciono la busqueda de nivel 2  o superior
  2. if (in_array($pin >= 2, $array))

Ahí no estás condicionando nada, sencillamente "$pin >= 2" va a devolver true/false, y nada más.

Entonces in_array() buscara dicho valor booleano en la lista de valores de $array ¿notaste el error?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 09/07/2016, 11:16
 
Fecha de Ingreso: febrero-2016
Mensajes: 16
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: Planteamento para uso de variables con MySql

Código PHP:
Ver original
  1. <?php
  2. require 'conex.php';
  3. $aus = 1234;
  4. $consulta = $conexion -> query ("SELECT * FROM mitabla WHERE codubi = $aus");
  5. while ($row = $consulta -> fetch_array()){
  6.     $cod = $row[codigo]; $nom = $row[nombre]; $cal = $row[codubi]; $pin = $row[nivel];
  7.     $con = "SELECT * FROM mitabla WHERE codubi = ".$cod;
  8.     $uni = " UNION ";
  9.     $sql = array('select' => $con, 'union' => $uni );
  10.     $ultimo = end($sql);
  11.     foreach ($sql as $clave => $valor) {
  12.         if ($ultimo == $valor) {
  13.             unset ($ultimo);
  14.         }else {
  15.         $consulta1 = $conexion -> query ($valor);
  16.         while ($row1 = $consulta1 -> fetch_array()){
  17.           echo $row1[nombre]." <br>";
  18.         }
  19.         }
  20.     }
  21. }
  22. ?>
Hasta aqui funciona bien. Hasta el segundo nivel de busqueda; mi pregunta ahora es como hacer para repetir el procedimiento para los niveles de busqueda mas a fondo, para este caso en especifico son 10 niveles de busqueda donde 10 tiene la mayor cantidad de ubic y 1 son terminales la cuestion mia es ¿Debo repetir el procedimiento 10 veces para realizar la Busqueda? o ¿Existe una forma de sentenciar que a medida que encuentre ubic con mas ubic en su dependencia realice la busqueda necesaria o sea que escarbe todas y cada una de las ubic hasta encontrarlas todas?

Agradezco su ayuda para este proyecto.

Última edición por thezyrax; 09/07/2016 a las 23:04
  #7 (permalink)  
Antiguo 11/07/2016, 09:26
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: Planteamento para uso de variables con MySql

Repito lo que ya comenté, debes hacer recursividad, no interesa de cuantos niveles sea, la recursividad te devolverá todos los hijos de un determinado registro.

Saludos
  #8 (permalink)  
Antiguo 11/07/2016, 14:04
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Planteamento para uso de variables con MySql

@thezyrax: Como ya te ha dicho wilmer30, dado que no existen consultas recursivas en MySQL, a diferencia de otros DBMS, cuando tienes una relación multinivel dinamica (es decir donde no tienes una cantidad finita de niveles), el único camino es combinar SQL con PHP generando consultas recursivas que te vayan devolviendo los diferentes niveles.

Sólo si la cantidad de niveles es constante, fijo, puedes crear una query única para que devuelva todo. AL menos en MySQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: consultadb, mysql
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 04:45.