Do not insert equal data into the database

0

I'm getting data from an XML, converting it to array and inserting it into the database. But I only need results that do not exist yet.

Below is my code, I have tried in many other ways, none with a good result. In the code below always falls in já tem no banco even if 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);  
            }
        }
    }
}   
    
asked by anonymous 07.03.2014 / 21:55

1 answer

5

Edit:

$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 it will always return TRUE, you need to complete the query and check if there is any line (as I suggested above).

I also recommend switching

mysql_insert_id()

by:

$ci->db->insert_id()

So you keep the structure standardized.

    
07.03.2014 / 22:02