1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.
  2. Informação: Pela 0:30 desta Sexta-feira (9 de Dezembro, 23:30 de Quinta-feira nos Açores) o Fórum e restantes sites da ZWAME vão estar offline para manutenção durante cerca de 1h30.
    Se necessário faremos actualizações via Twitter e Facebook.
    Remover anúncio

nao inserir repetidos PHP

Discussão em 'Programação' iniciada por devil_online, 7 de Fevereiro de 2006. (Respostas: 17; Visualizações: 2223)

  1. devil_online

    devil_online Power Member

    boas
    eu tenho este codigo para criar nomes

    PHP:
    $firstnames = array("Peter""John""Francisco");
    $lastnames = array("Simão""Gustavo","Gaspar");
    $name1 $firstnames[array_rand($firstnames)]." ".$lastnames[array_rand($lastnames)]; 
    eu gostava de inserir os nomes na base de dados sem os repetir.

    como posso fazer isto em php

    obg
     
  2. Arh!!!

    Arh!!! Power Member

    Contas as ocorrências que já lá estão...
     
  3. devil_online

    devil_online Power Member

  4. eXcept

    eXcept Power Member

    o que ele queria dizer seria algo do genero

    $a = mysql_num_rows(mysql_query(select * from tabela where nome = xpto))
    if $a = 0 {
    inserir dados
    } else {
    echo já existe alguem com esse nome }



    ( isto em código mt rebuscado, claro :P )
     
  5. devil_online

    devil_online Power Member

    a ideia é essa
    porem o q keria era que tentasse nomes ate conseguir um diferente

    obg
     
  6. turbulence

    turbulence Power Member

    Podes fazer uma query que procure se o nome já existe antes do o inserires, se sim, não faz nada, se não insere.
     
  7. devil_online

    devil_online Power Member

    como faria isso?

    De facto penso q nao seja bem o q kero
    pois ai iria dizer se o nome ja existia nao inseria e se nao existisse inseria

    o meu problema é ao criar um nome q ja existe ele nao ira inserir (ate aki td bem) mas queria que ele criasse outro até achar um que nao exista. Penso que um comando 'while' talvez.
    obg
     
    Última edição: 7 de Fevereiro de 2006
  8. Mitnick

    Mitnick Power Member

    podes fazer com um while ou com um for, e dentro do while poes o que o eXcept mostrou.

    PHP:
    for($i=0$i<$numDadosNoArray$i++)
    {
        
    $firstnames = array("Peter""John""Francisco");
        
    $lastnames = array("Simão""Gustavo","Gaspar");
        
    $nome$firstnames[array_rand($firstnames)]." ".$lastnames[array_rand($lastnames)];

        
    $queryNome mysql_query("SELECT * FROM nomes WHERE nome='$nome'");
        
    $numRegistos mysql_num_rows($queryNome);

        if(
    $numRegistos==0)
        {
              
    mysql_query("INSERT INTO nomes (nome) VALUES ('$nome')");
        }
    }
     
  9. Arh!!!

    Arh!!! Power Member

    eXcept, estava a pensar mais numa optica dum "Count(*) < 1" para não andar com registos para trás e para a frente, mas a ideia era essa.

    Eu não sei quantos nomes tens à partida, mas tens de contabilizar a hipótese que poderás ficar sem novas entradas, mas no entanto a aplicação continua a tentar encontrar mais uma...

    Acho que não consegues fazer isso com um query...
     
  10. turbulence

    turbulence Power Member

    A que estava a referir-me era a algo tipo isto:
    PHP:
    $queryNome mysql_query("SELECT * FROM nomes WHERE nome='$nome'");
    $numRegistos mysql_num_rows($queryNome);
    if(
    $numRegistos==0)
        {
              
    mysql_query("INSERT INTO nomes (nome) VALUES ('$nome')");
        }
    Como disse o mitnick ;)
     
  11. iznougud

    iznougud I quit My Job for Folding

    em vez de um while podes tentar usar o "LIKE", assim carregas em memoria todos os valores parecidos, assim podes descobrir o novo nome que precisas sem estares sempre a perguntar à base de dados. O WebServer agradece :D
     
  12. devil_online

    devil_online Power Member

    qual o codigo que usaria?
    obg
     
  13. devil_online

    devil_online Power Member

    desculpem a insistencia, mas alguem sabe algum codigo que de para inserir dados numa base de dados sem repetir esses dados? obg
     
  14. mcog_blaster

    mcog_blaster Power Member

    Esses valores sao chaves primárias?
    Se forem tas com sorte, ou nao...
    Que versao do Mysql tas a usar?
    Se estiveres a usar uma versao superior ou igual a 4.1 entao pode ser que estejas mesmo com sorte.

    A partir desta versao é possivel fazer algo do tipo:

    INSERT INTO <tablename> (id, data) VALUES(?, ?) ON DUPLICATE KEY UPDATE data = ?.

    Se puderers usar este novo mecanismo, procura algo mais nos manuais.
    Se nao, entao ja foi colocado codigo que te permite nao inserir duplicados.
     
  15. el_zeus

    el_zeus Power Member

    O que tu precisas não tem nada a ver com php.
    Na tabela onde vais inserir os dados deves criar para cada atributo que precises ser único da tabela(s) uma unique constraint :

    Por exemplo:

    Tens a tabela de empregados com os empregados que tem os atributos nome, morada,data_nascimento, nif, bi, pais e supõe que querias que o nif fosse único para o conjunto de empregados criavar um uk (unique key) apenas para o nif, mas se por exemplo fosse preciso que o nif fosse único para cada pais, defenias uma uk composta para os atributos (nif,pais).
     
    Última edição: 22 de Fevereiro de 2006
  16. Arh!!!

    Arh!!! Power Member

    Tenho a impressão que o que o devil_online quer é um query que lhe retorne todas as combinações possíveis dos nomes que ainda não foram preenchidas.... Acho que não vai ter sorte com isso. Só mesmo verificando se a combinação já está ou não inserida na tabela, e para isso não precisa de unique constraints, basta um SELECT COUNT(*) para saber se determinada combinação já está ou não registada na tabela...

    Abraço.
     
  17. el_zeus

    el_zeus Power Member

    O que percebi era que ele queria inserir nome que não existissem na tabela. Como tal se tiver as unique keys definidas, supostamente ao inserir ira receber um erro da bd. Se no entanto necessitar de guardar os nomes que não pôde inserir devido a esse erro, é fácil. Basta guardar o nome que tentou inserir sem sucesso num array ....

    Aliás um dos deveres das base de dados, além do obvio que é guardar correctamente os dados é conseguir efectuar as validações de regras de negócio definidas. Deste modo poderás fácilmente mudar de tecnologia de desenvolvimento ao nivel de UI sem afacter as regras de negócio definidas...
     
    Última edição: 22 de Fevereiro de 2006
  18. devil_online

    devil_online Power Member

    ja esta resolvido obg
    a questão era eu podia por UNIQUE KEYS, porem ao dar o erro, teria que efectuar a criação de um nome outra vez ate dar certo ou seja mais ou menos assim:
    (while ($inserir = false) {
    create_name ()
    }

    obg
     

Partilhar esta Página