Jump to content

Como fazer update de um numero indefinido de rows


XicoXperto

Recommended Posts

Boas malta,

Hoje venho fazer uma sondagem XD

Isto é o seguinte temos:

- 1 cliente

- x contactos

- y documentos

Ok, a minha ideia para quando fazer um update às tabelas era, apagar tudo o que tinha, e voltar a inserir os dados (sejam eles novos, ou não).

Pois o problema está tanto no numero de elementos (contactos e/ou documentos) e se estão (ou não) alterados.

Como acredito que hajam opções mais eficazes decidi postar para saber quais as formas que a malta usa para estes casos. Não percebo muito de analises, mas acredito que existam formas que consumam menos processamento na base de dados...

(no meu caso estou a trabalhar com MySQL , mas penso que a ideia seja igual para as varias BD's)

Link to comment
Share on other sites

Eu sei que nao ajuda ... mas eu faco dessa maneira: apago tudo o que é relevante e crio novamente com as opcoes certas.

Tem a vantagem do codigo ser facilimo de compreender -- principalmente olhando para o comentario 🙂

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

apagar tudo o que tinha, e voltar a inserir os dados (sejam eles novos, ou não).

tens a noção que isso não teoricamente correto por que estás a remover relações que na realidade não são para remover (mesmo que mais a frente as vás adicionar novamente)

e que tal assim

$lista_a_atualizar;
$lista_na_bd;

// preencher o array $lista_a_atualizar com os dados do pedido/request
// o preenchimento deverá seguir a norma
// id do registo => lista de valores
...

// ler os registos na base de dados para a $lista_na_bd;
// o preenchimento deverá seguir a norma
// id do registo => lista de valores
...

// processar os registos a serem criados/atualizados
foreach ($lista_a_atualizar as $id => $valores)
{
 if (array_key_exists($lista_na_bd, $id))
 {
   // actualizar registo
   ...
   // remover da $lista_na_bd
   unset($lista_na_bd[$id]);
 }
 else
 {
   // criar registo
   ...
 }
}

// o que sobra na lista $lista_na_bd são os registos a serem removidos
foreach ($lista_na_bd as $id => $valores)
{
 // remove da base de dados
 ...
}
  • Vote 2
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Isso não iria funcionar (pelo menos no meu caso) porque quando o utilizador pretender editar os dados, são todos carregados de novo para o browser, e após isso o utilizador pode, manter, alterar, remover ou adicionar elementos.

O timestamp seria sempre actualizado, não é? E depois haveria o problema dos novos e dos removidos e ainda teria que adicionar a cada tabela onde isso acontece mais uma coluna.

A ideia do HappyHippyHippo foi bastante interessante, tal que eu estava a usar o outro metodo de apagar tudo e voltar a inserir, e realmente este método funcionou perfeitamente...

Tem mais linhas de código, mas imagino que a performance seja melhor...

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.