Do not enter equal data in the database

Asked

Viewed 480 times

0

I’m taking data from an XML, converting to array and entering into the database. But I need only results that do not yet exist.

It follows below my code, I have tried several other ways, none with a good result. In the code below always falls in the já tem no banco even though there is no such result.

foreach ($dados as $grupo) {//mostra os grupos existentes
    foreach ($grupo as $subgrupo) {//mostra cada subgrupo
        $ci->db->trans_start();
        if (!$ci->db->select('nome')->from('tipo_produto')->where('nome', $subgrupo->attributes()->SubGrupo)) {
            $arraysubgrupos = array(
                'nome' => "" . $subgrupo->attributes()->SubGrupo . "",
            );
            $ci->Cadastros_model->incluir('tipo_produto', $arraysubgrupos);
            $id_produto = mysql_insert_id();
            echo "ok";
        } else {
            echo "ja tem no banco";
        }
        $ci->db->trans_complete();
        $arraygrupos = array(
            'nome' => "" . $grupo->attributes()->Grupo . "",
            'tipo_id_tipo_produto' => "" . $id_produto . ""
        );
        //$ci->Cadastros_model->incluir('categoria', $arraygrupos);
        $id_grupo = mysql_insert_id();

        foreach ($subgrupo as $produto) {//exibi os produtos
            if ($produto->attributes()->codigo != "") {
                $arrayprodutos = array(
                    'id_produto' => "" . $produto->attributes()->codigo . "",
                    'nome' => "" . $produto->attributes()->nome . "",
                    'descricao' => "" . $produto->attributes()->descricao . "",
                    'valor' => "" . $produto->attributes()->preco . "",
                    'tipo_produto_id_tipo' => "" . $id_produto . "",
                    'categoria_id_categoria' => "" . $id_grupo . ""
                );
                //$ci->Cadastros_model->incluir('produtos', $arrayprodutos);  
            }
        }
    }
}   
  • XML has lines with exactly the same data? Or for example lines with the same product id_and other different information?

  • Setting a primary key (or just a single index) in your database table would not easily solve your problem?

1 answer

5


Correct:

$ci->db->select('nome')->from('tipo_produto')->where('nome', $subgrupo->attributes()->SubGrupo)

Changing to:

$ci->db->select('nome')->from('tipo_produto')->where('nome', $subgrupo->attributes()->SubGrupo)->get()->row()

The way you did will always return TRUE, you need to complete the query and check if there are any lines (as I suggested above).

I also recommend changing

mysql_insert_id()

for:

$ci->db->insert_id()

So you keep the standard structure.

  • Thank you very much Vieira worked perfectly now !

Browser other questions tagged

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