domingo, 9 de maio de 2010

LGM-BD

Para praticar um pouco de PHP com MySQL eu estava motando um BD baseado na LGM.
Eu devo ter te contado há muito tempo atrás que estava pensando, tentando ou querendo fazer algo do tipo.

Eu cheguei a criar 3 tabelas no PHPMyAdmin, configurar a estrutura básica e gerar uma consulta a partir de uma página em php. Isso no ano passado, e então passou um tempo comecei o estágio e isso ficou parado.

Até que quando você criou o LGM Arcade fiquei com aquela dúvida se já não tinha algum dos jogos em outros compostos, e meu deu vontade de seguir com o 'projeto'. E até consegui adiantar bastante, me empolguei e consegui algum resultado. Apesar de antes imaginar um verdadeiro BD, eu simplifiquei e quero somente um BD para que possamos pesquisar um jogo.

Antes eu também tinha criado vários detalhes como ano, variante, aka, regiao, etc... Seria tão demorado quando fechar a LGM, deixar tudo isso pronto. O conceito básico é pesquisar e ver se já está em algum composto.
Principalmente pois aqueles compostos que o outro criou a gente não memoriza como os que a gente montou ou listou, etc.

Agora eu to meio que na metade do que será a inserção em massa de jogos para o BD, bastará colocar vários jogos um por linha em uma caixa de texto, apertar o botão, e será inserido na tabela.

Penso quando estiver pronto em colocar embutido num post do blog, se funcionar.

Se quiser dar uma olhada está em http://wwwexe.inf.ufsc.br/~cobra/alter.php
Desse php ele segue para outros.
Está em desenvolvimento estão tá bem zoado com várias coisas de teste aparecendo.

Só cuidado com o Insert, que está funcionando, e é inserido no banco.

17 comentários:

  1. Pelo tamanho que está a LGM, e pelo oque ainda pode ficar, um BD de pesquisa já ajuda bastante imagine se fosse um BD completo, mostrando o ano, versão, nomes alternativos, região e ordem no composto... mas por enquanto vão ficar tudo null nessas colunas.

    O Pesquisar por enquanto está pesquisando os Compostos do BD, já que ainda não tem nenhum jogo real inserido. Ele faz um consulta do tipo LIKE '%texto%' no nome.

    ResponderExcluir
  2. Muito bom! Me fez lembrar do programa da LGM quando comecei.

    Uma dica que aprendi com o tempo. Tente sempre deixar o código php separado do html, facilita a manutenção no futuro. ex:
    < ?php código ? >
    inicio html
    //tente trazer tudo por variáveis quando possível e evite por muito ifs e fors aqui.
    < ?php echo variavel1; ? >
    html
    < ?php echo variavel2; ? >
    fim html

    Ah sim, se o número de arquivos crescer muito, é melhor criar uma pasta pro programa, se não fica uma muvuca. hehehehe

    ResponderExcluir
  3. Não entendi o evitar muitos if e fors aqui.
    "Aqui", seria dentro do (html) (/html) ?

    ResponderExcluir
  4. Sim, quanto mais separado você conseguir deixar seus códigos, melhor.

    ResponderExcluir
  5. Valeu pela dica, realmente se ficar separado no futuro ficará mais fácil, ainda mais usando notepad.

    E novamente estou aqui às 04:30 da matina, consegui finalizar o Insert em massa(em_massa.php), muito massa! ^^
    Com uns truques do excel que aprendi no estágio inclui todos os compostos no BD, e foi muito simples e rápido inserir os jogos, inseri todos os do Midway. Como vale a pena ter uma ferramenta...
    Claro que só é fácil pois já fizemos a lista de jogos e colocamos na internet, hehe.

    Na página de inserção em massa, é só colocar um jogo por linha(muito fácil de conseguir colando no excel), mas tem cuidar com linhas vazias, mesmo no final pois ele insere mesmo assim como um jogo sem nome.

    Ao lado do botão Inserir tem um campo para preencher, aquilo é a senha que se não for digitada não rola. A senha é bem fácil, tem a ver com LGM e Zelda. Ou LGMの伝説 em romanji.

    Oque ainda não implementei são as consultas, que no momento só dá pra pesquisar por algum jogo. Mas na Query da (alter.php) dá pra fazer consultas, essas são as tabelas e colunas que importam por agora, respeitando minusculas e maiusculas:
    Table: jogos
    >id,nome,composto
    Table: COMPOSTO
    >ID_COMPOSTO,NM_COMPOSTO,DIVISAO

    Na query dá pra ter 2 resultados no Select com alias de 'id' e 'sistema', por exemplo:
    >SELECT j.nome as id, c.NM_COMPOSTO as sistema FROM jogos j join COMPOSTO c ON c.ID_COMPOSTO=j.composto WHERE ID_COMPOSTO=125;
    ou
    >SELECT ID_COMPOSTO AS id,NM_COMPOSTO AS sistema FROM COMPOSTO ORDER BY sistema LIMIT 0,50;

    Mas ainda tá precário a página que dá o resultado da query.

    ResponderExcluir
  6. Opa, tá ficando muito bom.

    Hum, tenho certeza que da para tratar por php os dados para excluir as linhas vazias. Não sei como está seu código, mas a função empty() talvez ajude.

    Um paleativo para evitar multiplas inserções de linhas vazias seria criar um indíce Unique para a coluna nome, em caso de nome repetido (no caso vazio), o BD em vez de adicionar a nova linha, manda um warning.

    Você tem compostos salvos em excel? Eu sempre os salvos em txt, isso quando não viraram html direto. Da para pegar alguns jogos do novo site, onde atualizei e montei alguns compostos, mas talvez seja melhor esperar até você concluir o programa, já que também muitos compostos tem ainda que ser atualizados e/ou verificados.

    ResponderExcluir
  7. Eu não tenho salvo em Excel, mas eu copiei umas listas do blog e do seu site e colei no Excel, assim eu consegui só os jogos por linha.

    Fazer Unique ainda não dá, pois terão registros com nomes iguais, pois há jogos com nomes iguais.
    E jogos em compostos diferentes. Esse ultimo caso seria resolvido se eu usasse todas as tabelas do BD, como plataforma, ano, região, etc..

    Eu vou dar uma olhada nesse empty();
    Outra coisa interessante é se tivesse uma função para tirar espaços, pois usando o Excel para formatações às vezes os nomes vem com espaço antes e depois do nome, tipo:
    " Super Mario "

    Mas antes de trabalhar nisso quero ver se deixo algumas opções de consultas para quando vc querer pesquisar jogos de um Composto ou verificar que o que foi Inserido está realmente lá e de modo correto.

    Eu acho que completando um BD com todos os jogos e uma ferramenta de pesquisa vai ser uma coisa de grande utilidade para gente. Pois apesar de importar listas em massa, não tem como saber se por exemplo um jogo que gente jogou na LGM Arcade já estava em outro composto (tirando os óbvios), e assim poderá ser atualizado em seu status.
    Ou até mesmo, devido a grande quantidade de compostos, acabar aparecendo um outro composto com vários jogos repetidos, hehe, e sem ter essa intenção.

    --
    Uma coisa que ainda não sei fazer é separar em blocos o resultado da consulta, pois quando for executado um select eu vou deixar um limite, imagina carregar todos os registros... e nesse caso teria que dividir em páginas... não sei como vou fazer isso ainda.

    ResponderExcluir
  8. Hum, acho que jogos com nomes iguais são raridade. Mas eu não sei como você está definindo o título (nome JP, nome EUA, um mix...).

    Na realidade o comum é termos versões diferentes de um mesmo jogo em compostos diferentes, então talvez você precise de uma tabela de versões, nesse caso um composto é formado por versões de jogos.

    De uma olhada na função trim(), ela remove os espaços em brancos do início e fim de uma string.

    Sim, será bem útil, mas lembre-se que a maioria dos compostos não tem sua lista de jogos ainda, apenas jogos candidatos com listas genéricas. Isso é até uma coisa que estou tentando deixar mais claro no novo site (que esta andando bem devagar a espera do PC novo...).

    É possível sim separar o conteúdo da busca em páginas. Lá no trabalho já vi funcionando, embora não me lembre ao certo o código. Refrescarei minha memória amanhã e depois te passo como funciona. Sei que é bem simples.

    ResponderExcluir
  9. Sim, infelizmente muitos compostos não tem listas definidas, mas muitos já tem. :)

    Nomes iguais. Eu montei o BD pensando em tudo isso, como vc mesmo disse, eu usei o termo variante no BD, mas não convém deixar tudo pronto de uma vez, demoraria vários meses devido ao tempo que tenho disponível, e como disse antes to tentando fazer do BD hoje uma ferramenta de pesquisa, para achar jogos, achando o composto conseguimos discutir e procurar mais informações.
    Então por exemplo Street Fighter II no banco de dados, as colunas ou tabelas que definem: plataforma, região, ano estarão NULL.

    Não quero deixar Unique no nome, pois essa quando o banco estiver correto é para funcionar desse jeito mesmo:
    ID | Nome do Jogo | Sistema | Região
    01 | Street Fighter| Arcade | Japan
    02 | Street Fighter| 3DO | Japan
    03 | Street Fighter| Nintendo | USA

    Até poderia colocar Nome-JP e similares, mas isso perderia toda a facilidade da importação de jogos, a maior vantagem agora é poder inserir no BD vários jogos rapidamente.
    Aliás essa discução já não faz mais sentido uma função como a empty() já resolveria meu problema.

    Voltando a uma dúvida minha, será que é possível carregar a minha página de pesquisa dentro de um post aqui do blog?
    Assim não precisaria sair daqui quando quisesse fazer uma pesquisa.

    ResponderExcluir
  10. Então, o que quis dizer é que uma solução seria UNIQUE para a tabela de jogos, e para expressar a existência de versões Arcade, 3DO, etc, teria uma tabela de versões.

    Quanto a sua dúvida, a única solução que imagino, seria fazer como fazemos com as tabelas do google docs e "inserir" a sua página através da tag IFRAME.

    Quanto a informação que fiquei te devendo ontem, para dividir a consulta em páginas podes fazer assim:

    SELECT colunas FROM tabela LIMIT 20 OFFSET X.

    Ai a sua consulta traz 20 linhas começando em X. No html você põe um botão para próxima página que envia novo número para a consulta, por exemplo, página 2 envia número 20, pois a primeira página começou no 0 e foi até 19. Agora na página dois a consulta traz as linhas 20 até 39.

    Deu pra entender?

    ResponderExcluir
  11. Entendi, mas será vai carregar a página php de novo? Como eu sou beginner no php+sql, o meu código não tá lá aquelas coisas, se carregar a página toda de novo ele vai pedir a senha do BD novamente, e pra resolver isso eu teria que ter IFs englobando grandes quantidade do código, tudo isso porque não consegui fazer um popup para garantir acesso à página específica, hehe.
    Eu vou testar pra ver como fuciona.

    A tabela de versões, eu tentei dizer que tinha pensado nisso, numa tabela chamada variantes, mas como disse não seria prático hoje para importar nessas 2 tabelas, eu ainda não tinha definido bem como seria a variante, a principio ela foi criada para esclarecer o problema de Super Mario Bros.2 com Lost Levels ou Street Fighter com Fighting Street, mesmos jogos mais que pode enganar quem não conhece, assim como todos os RPG japoneses com nomes diferentes. Não cheguei a pensar como um grande grupo que define todas as versões lançadas, talvez possa fazer isso no futuro.

    A trim é SQL né, eu tava achando que era função do Php mesmo.

    Desde que começamos essa discução não consegui mais mexer, no Sabado tb não vai dar, e Segunda tenho prova, hehe
    Por enquanto só vou ficar nas teorias aqui dos comentários mesmo, a prática tá em stand by.

    ResponderExcluir
  12. A função trim é do PHP, mas não duvido que exista no SQL também, essa função existe em várias linguagens.

    Eu não entendi direito sua dúvida agora. Está se referindo ao IFRAME ou a busca dividida por páginas?

    Se for a busca, não precisa de senha porque é só busca, não inserção. Se é o IFRAME, a página vai funcionar da mesma maneira que funciona como página no navegador. Como eu não cheguei a inserir nada não estou por dentro da rotina do seu programa.

    Pensando de maneira geral, para inserir a senha somente uma vez e continuar acessando o programa posteriormente teria que ser criado algo como um sistema de login. Sempre quis fazer um e sei que não é tão complexo quanto parece, mas nunca fui muito longe. Uma solução simples talvez seja passar a senha por post em todos os formulários.

    ResponderExcluir
  13. É na hora de passar de página na consulta mesmo, e para fazer qualquer consulta no banco ele vai pedir senha, e senha da conexão com o sql, que normalmente eu deixo já gravado no php, mas vc falou uma coisa que não tinha poercebido, eu já deixo automatico a senhas nas consultas. Então não tem pepino mesmo.

    Um sistema de login seria o modo mais seguro mesmo. Mas não é a prioridade agora também. Apesar de ser uma implementação importante de se saber.

    ResponderExcluir
  14. Na página alter.php agora está diponivel um botão de resumo que mostra quantos jogos foram inseridos no banco para cada Composto.

    ResponderExcluir
  15. Muito legal essa tela de resumo.

    ResponderExcluir
  16. Tentei fazer com que mostrasse igual mostra no PhpAdmin, com cada linha de uma cor, ou cinzas intercalados, mas sem sucesso. pelo menos de um modo fácil.

    Se descobrir me avise... :}

    ResponderExcluir
  17. Mandando por e-mail o código porque o blogger não deixa eu postar...

    ResponderExcluir