Nueva pregunta

Pregunta:

Fecha: 03-01-2017 12:27:55 (En Español)

Trabajando con dos tablas en PHP[No resuelta]

Saludos y Buen año a toda la comunidad, mi inquietud es la siguiente tengo dos tablas con los siguientes campos:
tabla rubro: campos 1.- numero de rubro 2.- descripción del rubro, ambos del tipo caracter.
tabla haberes: 1.- DNI, 2.- numero de rubro, 3.- Monto de rubro.
Deseo buscar en la tabla rubro ubicar el numero de rubro de la tabla haberes, en alguna variable asignar el valor de descripcion del rubro una vez encontrado y luego reemplazarlo en la tabla haberes en el campo numero de rubro.
y la busqueda y cambio debera de hacerse en cada registro de la tabla haberes.
He realizado el siguiente codigo pero no me funciona, espero la ayuda de ustedes.
Gracias de ante mano
Pedro
<?php
		$conexion = new mysqli('localhost','root','','sistema',3306);
		
		$find_1 = mysql_query("SELECT rubroh FROM rubroh"); 
		$find_2 = mysql_query("SELECT hab1, mtohab1 FROM rubrobol");

		while($data = mysql_fetch_array($find_2))
		{ 
    	$mtohaber = mtohab1;
    	if ($mtohaber>0)
    		{ 
    		while($data2 = mysql_fetch_array($find_1))
	    		{ 
	        		if($data['hab1'] == $data2['rubroh'])
	        			{ 	$hab1 = 'rubroh';
	        				$remplazo = mysql_query("INSERT INTO rubrobol ('hab1') VALUES ('$hab1')");
	        				mysql_query($remplazo);

	        			}			
	            }
            } 
        }
?>
Etiquetas: Base de Datos - MySQL - PHP - PHP MySQLi - Pregunta - Query Votos: 0 - Respuestas: 10 - Vistas: 23 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 04-01-2017 04:40:06 El algoritmo que sugiero es:

    1. Guardar en un arreglo el resultado de la consulta a la tabla rubroh, para ello se puede usar el mismo ciclo que tiene.

    2. En otro ciclo, mientras se va realizando la consulta usar la función in_array() usando el arreglo que había guardado anteriormente.

    Es decir, dos ciclos uno para llenar el arreglo de la primera consulta; otro para hacer la comparación y dentro de él realizar la inserción en la tabla rubrobol.

    El siguiente vinculo lo lleva a donde se trabaja la función que aquí comento: in_array();

    PD: No olvide cerrar la conexión a la base de datos en todos sus scripts PHP, dejarla así como esta puede llegar a ser un problema de seguridad en la aplicación y generar un desbordamiento de la memoria ram.
      Votos: 1 - Link respuesta
     
  • Fecha: 04-01-2017 09:04:35 explícate bien mi estimado no comprendo tu pregunta.   Votos: 0 - Link respuesta
     
  • Fecha: 04-01-2017 12:46:52 Saludos Rasmus:
    Deseo buscar en una tabla llamada rubros y que tiene dos campos num_rubro, des_rubro y tiene los siguientes datos: 1, basico; 2, familia; 3, rural y asi sucesivamente desde la tabla haberes en esta tabla estan los campos DNI, num_rubro1, importe1, rubro2, importe2 y tiene los siguientes datos: 45781263, 1, 50.00, 3, 8.00; 28567541, 1, 25.00, 2, 3.00 y asi sucesivamente, desde esta tabla debo leer si rubroX es mayor a cero cargar una variable con el calor de num_rubroX y buscarla en la tabla rubros ubicar el num_rubro igual num_rubroX y cargar en una variable el valor de des_rubro para en la tabla haberes hacer el cambio de num_rubroX con la variable de des_rubro, esta actividad en cada registro de la tabla haberes, espero me hayas entendido y me puedas ayudar.
    Gracias
      Votos: 0 - Link respuesta
     
  • Fecha: 05-01-2017 01:57:46 El problema que veo en tu razonamiento es que estas modificando uno de los valores con los que se realizan las busquedas , provocando que un valor pueda ser modificado varias veces.
    Si las tablas estuvieran indexadas correctamente (relacionadas entre si - clave primaria y foranea ). podrias resolver todo eso a nivel de la base de datos con un update vinculado a un consulta relacional ( Inner Join ).
    crear loops para resolver actualizaciones tarda muchisimo mas y ocupa inadecuadamente tiempo y recursos de servidor
      Votos: 1 - Link respuesta
     
  • Fecha: 08-01-2017 08:06:41 Hola amigo debes utilizar JOIN y tambien ALIAS.

    Me explico puedes asignar alias a las tablas y los campos y ambas tablas las "unificarias" con el join. Seria algo como asi :

    SELECT campo1.tabla1 , campo2.tabla1 , campo3.tabla1 , campo1.tabla2, campos2.tabla2, campo3.tabla3 FROM tabla1 INNER JOIN tabla2 ON campo1.tabla1 = campo1.tabla2 WHERE campoX = lo que quieras condicionar

    Es mas o menos asi la sentencia. lo que esta escrito en mayuscula es de sql y deberia ir salvo el where si quieres condicionar o no.

    Te recomiento uses el programa Mysql Workbench en el cual puedes probar como te saldran las consultas sql antes de pasarlas a tu codigo.

    saludos y espero te sirva.
      Votos: 1 - Link respuesta
     
  • Fecha: 09-01-2017 17:15:40 No entiendo exactamente qué quieres hacer pero trataré de darte una respuesta que te sirva.

    Un punto importante es que tu base no está normalizada, esto limita mucho el mantenimiento y agregar nuevas funcionalidades como que un un "haber" tenga más de 2 rubros.

    Comenzaría por normalizar por lo menos a 3ra forma. Ya después puedes hacer cosas muy interesantes.

    CREATE TABLE rubro (
        num_rubro bigint unsigned not null auto_increment primary key,
        des_rubro varchar(100) not null unique
    );
    
    CREATE TABLE haber (
        dni varchar(15) not null,
        num_rubro bigint unsigned not null,
        monto decimal(8,2) not null,
        foreign key (num_rubro) references rubro (num_rubro),
        primary key(dni, num_rubro)
    );
    
    INSERT INTO rubro (des_rubro) VALUES ('Básico'), ('Familia'), ('Rural');
    
    INSERT INTO haber VALUES ('45781263', 1, 50), ('45781263', 3, 8), ('28567541', 1, 25), ('28567541', 2, 3);
    


    Checa este SQL Fiddle para que veas cómo funciona si corres la consulta:

    SELECT
        h.dni,
        r.des_rubro,
        h.monto
        FROM
            rubro r JOIN haber h ON r.num_rubro = h.num_rubro;
    


    Que te devuelve:

    |      dni | des_rubro | monto |
    |----------|-----------|-------|
    | 28567541 |    Básico |    25 |
    | 28567541 |   Familia |     3 |
    | 45781263 |    Básico |    50 |
    | 45781263 |     Rural |     8 |
    


    Teniendo este resultado puedes modificar tu código PHP para que recupere los registros y los despliegue como tú quieras:

    $resource = new mysqli('localhost', 'user', 'password', 'my_db');
    
    $result = $resource->query('SELECT h.dni, r.des_rubro, h.monto FROM rubro r JOIN haber h ON r.num_rubro = h.num_rubro');
    
    $records = [];
    
    while ($row = $result->fetch_array(MYSQLI_ASSOC))
    {
        $records[$row['dni']][] = [$row['des_rubro'], [$row['monto']]];
    }
    $result->close();
    $mysqli->close();
    
    foreach ($records as $dni => $data) {
        echo "DNI: {$dni}\n";
        foreach ($data as $record) {
            echo <<< TXT
        Rubro: {$record['rubro']}
        Monto: {$record['monto']}
    
    TXT;
        }
    }
    
      Votos: 1 - Link respuesta
     
  • Fecha: 10-01-2017 04:17:48 Saludos Ernesto y gracias por tu apoyo, cuando llamo al scrip en la linea donde inserto:
    echo <<< TXT
    me indica
    Parse error: syntax error, unexpected end of file in C:\xampp\htdocs\alumno\importar2.php on line 28
    pero cuando le inserto el punto y coma
    echo <<< TXT;
    me indica:
    Parse error: syntax error, unexpected '<<' (T_SL) in C:\xampp\htdocs\alumno\importar2.php on line 20
    podrias indicarme que accion debo realizar.
    Pedro
      Votos: 0 - Link respuesta
     
  • Fecha: 10-01-2017 04:25:02 Tienes la tabla A y tabla B. Quieres tomar el valor x de la tabla B y buscarlo en la tabla A, para después tomar el valor m de esa tabla A y luego actualizar el valor de z en la tabla B?

    Eso es lo que estás intentando?
      Votos: 0 - Link respuesta
     
  • Fecha: 10-01-2017 04:51:48 Hola Pedro

    Los parse Error siempre es que falta algo nomalmente un punto y coma sin embargo el mismo error te muestra lo que falta. Entre comillas simples tienes esto ( unexpected '<<' ) . En tu caso no es un punto y coma.

    Saludos
      Votos: 0 - Link respuesta
     
  • Fecha: 10-01-2017 04:55:56 Saludos Israel:
    Lo que busco es un valor de un campo X de la tabla A buscarlo en la tabla B en un campo Y y tomar un dato de la tabla B del campo Z para reemplazarlo en el campo X de la tabla A;
    ejemplo campo H1 de la tabla A con valor "1" buscarlo en el campo R1 de la tabla B que tiene como campos R1 y DESR1 al ubicarlo tomar el valor de DESR1 en alguna variable para luego reemplazarla en el campo H1 de la tabla A
      Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com