Error in MYSQL PHP JOIN function

Asked

Viewed 58 times

0

My JOIN function is working but I nickname the tables and even so, because the fields are identical my inputs that have the field of the same name are filled even if there is no record relative to the person id in the table.

$result = "SELECT A.id, A.nome, A.inativo, B.tipo_endereco, B.cep, B.tipo_logr, B.nome_logr, B.nume_logr, B.comp_logr, B.cidade, B.bairro, B.uf,"                         
            . " C.operadora, C.telefone, C.email, C.homepage, C.skype, D.cnpj, D.im, D.ie, D.iest, D.cnae, D.razao_social, E.cpf, E.sexo, E.nacionalidade,"             
            . " E.rg, E.orgao_emissor, E.estado_civil, E.data_nascimento AS data_nascimento_pf, F.codigo, F.funcionario, F.data_nascimento AS data_nascimento_func FROM PESSOA A"                                                                                 
            . " LEFT OUTER JOIN CADEND B ON (A.ID = B.ID_PESSOA) "                                                                                                       
            . " LEFT OUTER JOIN CADCONT C ON (B.ID_PESSOA = C.ID_PESSOA) "                                                                                              
            . " LEFT OUTER JOIN PJURIDIC D ON (C.ID_PESSOA = D.ID_PESSOA) "                                                                                             
            . " LEFT OUTER JOIN PFISICA E ON (D.ID_PESSOA = E.ID_PESSOA) "
            . " LEFT OUTER JOIN CADFUNC F ON (E.ID_PESSOA = F.ID_PESSOA) WHERE A.id='$id' LIMIT 1";

    $resultado = $conn->query($result);

    // DECLARA A VARIAVEL
    $valores = array();

    if($resultado){
        $row = mysqli_fetch_assoc($resultado);
        $valores['nome'] = $row['nome'];
        $valores['inativo'] = $row['inativo'];
        $valores['id'] = $row['id'];
        $valores['tipo_endereco'] = $row['tipo_endereco'];
        $valores['cep'] = $row['cep'];
        $valores['tipo_logr'] = $row['tipo_logr'];
        $valores['nome_logr'] = $row['nome_logr'];
        $valores['nume_logr'] = $row['nume_logr'];
        $valores['comp_logr'] = $row['comp_logr'];
        $valores['cidade'] = $row['cidade'];
        $valores['bairro'] = $row['bairro'];
        $valores['uf'] = $row['uf'];
        $valores['operadora'] = $row['operadora'];
        $valores['telefone'] = $row['telefone'];
        $valores['email'] = $row['email'];
        $valores['homepage'] = $row['homepage'];
        $valores['skype'] = $row['skype'];
        $valores['cnpj'] = $row['cnpj'];
        $valores['im'] = $row['im'];
        $valores['ie'] = $row['ie'];
        $valores['iest'] = $row['iest'];
        $valores['cnae'] = $row['cnae'];
        $valores['razao_social'] = $row['razao_social'];
        $valores['cpf'] = $row['cpf'];
        $valores['sexo'] = $row['sexo'];
        $valores['nacionalidade'] = $row['nacionalidade'];
        $valores['rg'] = $row['rg'];
        $valores['orgao_emissor'] = $row['orgao_emissor'];
        $valores['estado_civil'] = $row['estado_civil'];
        $valores['data_nascimento_pf'] = $row['data_nascimento_pf'];
        $valores['codigo'] = $row['codigo'];
        $valores['funcionario'] = $row['funcionario'];
        $valores['data_nascimento_func'] = $row['data_nascimento_func'];
    }

in this case I left the F.data_birth to exemplify, I give JOIN but there is no employee record in this table CADFUNC so the return I have are the blank form fields but, the date comes filled with the value of the input of the physical person table PFISICA

1 answer

2


Although you use a nickname (alias) for the table (in query), this is only recognized by the database.

You need to add an alias to the column as well, because the fetch that the driver does disregard the table name and only cares about the column name.

SELECT
    E.data_nascimento as data_nascimento_pf
    F.data_nascimento as data_nascimento_func
    /** restante do sql **/

And, later in PHP, just recover through the alias:

echo $row['data_nascimento_pf'];
echo $row['data_nascimento_func'];

Update

Your problem is right here:

$valores['data_nascimento'] = $row['data_nascimento_pf'];
$valores['data_nascimento'] = $row['data_nascimento_func'];

You are assigning two different values at the same position (index) of array.

Besides, what are you going through a variable for ($row) to the other ($valores)?

Directly use the variable you want:

$valores = mysqli_fetch_assoc($resultado);
  • thanks worked, so I put $values to receive $Row, because before starting my while I state that $values is an array

Browser other questions tagged

You are not signed in. Login or sign up in order to post.