Banco de dados [RESOLVIDO]

1. Banco de dados [RESOLVIDO]

clenivaldo pires da silva
clenivaldo2017

(usa Ubuntu)

Enviado em 12/09/2017 - 23:52h

Meu Clenivaldo, estou desenvolvendo um Banco de Dados de sequencia nucleicas de fungos endofíticos do laboratório de Biotecnologia, meu TCC em Bioinformática. Precisa uma forma de salvar as sequencia em txt, para depois em converter em fasta, só que tetei e esta salvando somente última sequencia (Tirei código referente a gravação de arquivo .txt), ou seja, salvar as sequencias após uma consulta ao banco de dados pelo usuário final. Alguém sabe de uma forma.


<?php

//Conexão com banco de dados
$con=mysqli_connect("localhost","root"," ","lbiomic");
if (mysqli_connect_errno())
{
echo "Erro de conexão ao MySQL: " . mysqli_connect_error();
}

$con->query('SET NAMES utf8');

//Verificar os campos vazios
if (!empty( $_POST['busca'])){

$sequencia = $_POST['busca'];

//Consulta à dados ao banco de dados
$resultado = mysqli_query($con,"SELECT pesquisador.citacao, microorganismo.nomeCientifico, microorganismo.taxonomia, sequencia.locus, sequencia.numero_base, sequencia.biomolecula, sequencia.via, sequencia.definicao_sequencia, sequencia.versao_ncbi, sequencia.nt_sequencia FROM sequencia INNER JOIN microorganismo ON microorganismo.id_codMicroEndofitico = sequencia.codMicroEndofitico INNER JOIN pesquisador ON pesquisador.id_codPesquisador = sequencia.codPesquisador WHERE MATCH(locus, definicao_sequencia, nt_sequencia) AGAINST ('.$sequencia.') order by sequencia.id_codSequencia asc") or die (mysqli_error($con));

if ( mysqli_num_rows($resultado) == 0 ) {
echo "<h1>Sua pesquisa não retornou resultados, <br /> tente novamente!</h1>";
}

//Variável
$i=1;

//Percorrendo e exibir registros
while($registro = mysqli_fetch_assoc($resultado))
{
$nomeCientifico = $registro['nomeCientifico'];
$citacao = $registro['citacao'];
$taxonomia = $registro['taxonomia'];
$codMicroEndofitico = $registro['codMic'];
$locus = $registro['locus'];
$numero_base = $registro['numero_base'];
$biomolecula = $registro['biomolecula'];
$via = $registro['via'];
$definicao_sequencia = $registro['definicao_sequencia'];
$versao_ncbi = $registro['versao_ncbi'];
$nt_sequencia = $registro['nt_sequencia'];

echo "<hr>";
echo "<hr>";
echo "<h2>$i. $definicao_sequencia</h2>";
echo "<b>GenBank:</b> $versao_ncbi <br />";
echo "<hr>";
echo "<b>Locus:</b> $locus <br />";
echo "<b>Numero de Base:</b> $numero_base pb <br />";
echo "<b>Tipo:</b> $biomolecula <br />";
echo "<b>Via de Identificação:</b> $via <br />";
echo "<b>Organismo:</b> <i> $nomeCientifico </i> <br />";
echo "<b>Origem:</b> <i> $taxonomia </i> <br />";
echo "<b>Autor:</b> $citacao <br />";
echo "<b>Sequência Nucléica (Fasta):</b> <br />";
echo "<br>";
echo "<textarea rows='10' cols='80' style='border: 0; '>$nt_sequencia</textarea>";
echo "<hr>";
echo "<hr>";
echo "<br>";
echo "<br>";
$i++;
}

mysqli_close($con);

} else {
echo "<h1><br>Atenção!</h1><br><h2>Campos obrigatórios vazios</h2>";
}
?>


  


2. Re: Banco de dados

Vinicius Araujo Lopes
viniciusalopes

(usa Debian)

Enviado em 13/09/2017 - 01:01h

clenivaldo2017 escreveu:
Meu Clenivaldo, (...)Precisa uma forma de salvar as sequencia em txt, para depois em converter em fasta,(...)

Poderia explicar melhor essa parte, por obséquio?


 __________________________________
/ Apresente soluções! \
| Opiniões não resolvem problemas. |
| |
| --Viniciusalopes /
\ ---------------------------------
\ ^__^
\ (oo)\_______
(__) )/\/
||----w |
|| ||



3. Re: Banco de dados [RESOLVIDO]

clenivaldo pires da silva
clenivaldo2017

(usa Ubuntu)

Enviado em 13/09/2017 - 06:37h

Assim, tenho depositadas estas sequências nucleicas no banco, usuário faz pesquisa, vai retornar assim:

1. Alternaria alternata isolate C21-69 internal transcribed spacer 1, partial sequence; 5.8S ribosomal RNA gene and internal transcribed spacer 2, complete sequence; and 28S ribosomal RNA gene, partial sequence.

GenBank: KM362389.1
Locus: KM362389
Numero de Base: 552 pb
Tipo: DNA
Via de Identificação: 5.8S
Organismo: Alternaria alternata
Origem: Eukaryota; Fungi; Dikarya; Ascomycota; Pezizomycotina; Dothideomycetes; Pleosporomycetidae; Pleosporales; Pleosporineae; Pleosporaceae; Alternaria; Alternaria alternata group.
Autor: FELBER, A. C.
Sequência Nucléica (Fasta):

>KM362389.1 Alternaria alternata isolate C21-69 internal transcribed spacer 1, partial sequence; 5.8S ribosomal RNA gene and internal transcribed spacer 2, complete sequence; and 28S ribosomal RNA gene, partial sequence
ACGGGGTACGCTAAACTAAGTCAGGCAGGAAGTGCCGTCGTGGGTTGGAGTCGTCGTCGGGGATACAGTC
CATTGCTGAGGTTAGTATCACCCTTGGTCTTTTGCGTACTTCTTGTTTCCTTGGTGGGTTCGCCCACCAC
TAGGACAAACATAAACCTTTTGTAATTGCAATCAGCGTCAGTAACAAATTAATAATTACAACTTTCAACA
ACGGATCTCTTGGTTCTGGCATCGATGAAGAACGCAGCGAAATGCGATAAGTAGTGTGAATTGCAGAATT
CAGTGAATCATCGAATCTTTGAACGCACATTGCGCCCTTTGGTATTCCAAAGGGCATGCCTGTTCGAGCG
TCATTTGTACCCTCAAGCTTTGCTTGGTGTTGGGCGTCTTGTCTCTAGCTTTGCTGGAGACTCGCCTTAA
AGTAATTGGCAGCCGGCCTACTGGTTTCGGAGCGCAGCACAAGTCGCACTCTCTATCAGCAAAGGTCTAG
CATCCATTAAGCCTTTTTTTCAACTTTTGACCTCGGATCAGGTAGGGATACCCGCTGAACTT

Quero exportar em um aquivo.txt, somente o campo (nt_sequencia) - o que tem a sequencia em fasta, o problema que quando uso no código acima (exemplo):

$fp = fopen("exemplo.txt", "a");

fwrite($fp, "nt_sequencia");

fclose($fp);


Esta gravando somente a última sequencia da pesquisada, não estou sabendo onde aplicar estas partes da função, de foma que todas as sequências pesquisadas, através de filtros pelo usuário, esteja no arquivo txt (são mais de 300 sequências).


4. Re: Banco de dados [RESOLVIDO]

Ricardo Fabiano Silva
madrugada

(usa Slackware)

Enviado em 13/09/2017 - 10:27h

clenivaldo2017 escreveu:
[...]
Quero exportar em um aquivo.txt, somente o campo (nt_sequencia)
[...]
(são mais de 300 sequências).


Creio que o importante para nós que não somos biólogos, seja apenas o trecho acima.
Vocâ quer exportar todas as linhas de uma coluna de uma determinada tabela.

Não sei como fazer isto em PHP, embora creio que seja possível. Imagino que o melhor caminho é criar uma procedure ou um shell script que faça isso. E pelo PHP você chama a procedure ou o shell script.


5. Re: Banco de dados [RESOLVIDO]

Ricardo Fabiano Silva
madrugada

(usa Slackware)

Enviado em 13/09/2017 - 11:06h

Eis uma dica que vai ajudar:
https://www.vivaolinux.com.br/dica/Exportando-dados-do-MySQL-para-arquivos-textos/


6. Re: Banco de dados

Hector Nagao
heckjp

(usa elementary OS)

Enviado em 13/09/2017 - 11:32h

Outra coisa que pode te ajudar é usar a biblioteca de geração de pdfs FPDF. Segue o principio do que você quer mas obviamente gerando o resultado em PDF ao invés de txt.


7. Re: Banco de dados [RESOLVIDO]

clenivaldo pires da silva
clenivaldo2017

(usa Ubuntu)

Enviado em 13/09/2017 - 12:36h

Muito Obrigado, mas não pode ser pdf, pois tenho converter em fasta, para realizar busca nas sequencias no blast. O código estou testando ficou assim:

<?php

//Conexão com banco de dados
$con=mysqli_connect("localhost","root"," ","lbiomic");
if (mysqli_connect_errno())
{
echo "Erro de conexão ao MySQL: " . mysqli_connect_error();
}

$con->query('SET NAMES utf8');

//Verificar os campos vazios
if (!empty( $_POST['busca'])){

$sequencia = $_POST['busca'];

//Consulta à dados ao banco de dados
$resultado = mysqli_query($con,"SELECT pesquisador.citacao, microorganismo.nomeCientifico, microorganismo.taxonomia, sequencia.locus, sequencia.numero_base, sequencia.biomolecula, sequencia.via, sequencia.definicao_sequencia, sequencia.versao_ncbi, sequencia.nt_sequencia FROM sequencia INNER JOIN microorganismo ON microorganismo.id_codMicroEndofitico = sequencia.codMicroEndofitico INNER JOIN pesquisador ON pesquisador.id_codPesquisador = sequencia.codPesquisador WHERE MATCH(locus, definicao_sequencia, nt_sequencia) AGAINST ('.$sequencia.') order by sequencia.id_codSequencia asc") or die (mysqli_error($con));

if ( mysqli_num_rows($resultado) == 0 ) {
echo "<h1>Sua pesquisa não retornou resultados, <br /> tente novamente!</h1>";
}

//Declaração da Variável para enumerar as quantidades de sequências
$i=1;

//Percorrendo e exibir registros
while($registro = mysqli_fetch_assoc($resultado))
{
$nomeCientifico = $registro['nomeCientifico'];
$citacao = $registro['citacao'];
$taxonomia = $registro['taxonomia'];
$codMicroEndofitico = $registro['codMic'];
$locus = $registro['locus'];
$numero_base = $registro['numero_base'];
$biomolecula = $registro['biomolecula'];
$via = $registro['via'];
$definicao_sequencia = $registro['definicao_sequencia'];
$versao_ncbi = $registro['versao_ncbi'];
$nt_sequencia = $registro['nt_sequencia'];

echo "<hr>";
echo "<hr>";
echo "<h2>$i. $definicao_sequencia</h2>";
echo "<b>GenBank:</b> $versao_ncbi <br />";
echo "<hr>";
echo "<b>Locus:</b> $locus <br />";
echo "<b>Numero de Base:</b> $numero_base pb <br />";
echo "<b>Tipo:</b> $biomolecula <br />";
echo "<b>Via de Identificação:</b> $via <br />";
echo "<b>Organismo:</b> <i> $nomeCientifico </i> <br />";
echo "<b>Origem:</b> <i> $taxonomia </i> <br />";
echo "<b>Autor:</b> $citacao <br />";
echo "<b>Sequência Nucléica (Fasta):</b> <br />";
echo "<br>";
echo "<textarea rows='10' cols='80' style='border: 0; '>$nt_sequencia</textarea>";
$acumula = $nt_sequencia;
echo "<hr>";
echo "<hr>";
echo "<br>";
echo "<br>";
$i++;
}

//Salvar em arquivo .txt as consultas dos usuários
$arquivo = '/home/clenivaldo/arquivo.txt';
$fp = fopen($arquivo, 'a');
fwrite($fp, $acumula);
fclose($fp);

//Fechar o banco de dados
mysqli_close($con);

} else {
echo "<h1><br>Atenção!</h1><br><h2>Campos obrigatórios vazios</h2>";
}
?>

O problema que esta só retornando somente ultima sequencia da pesquisada,

>KX197962.1 Diaporthe anacardii strain PL01 internal transcribed spacer 1, partial sequence; 5.8S ribosomal RNA gene and internal transcribed spacer 2, complete sequence; and large subunit ribosomal RNA gene, partial sequence
TGTTGCCTCGGCGCAGGCCGTCCCCCCTGGGGTCCCTTTTGTCTCAAAAGGAGCAGCCGGCCGGTGGCCA
AATCAACTCTGTTTTTACACTGTAACTCTGAGTACAAAACATAAATGAATCAAAACTTTCAACAACGGAT
CTCTTGGTTCTGGCATCGATGAAGAACGCAGCGAAATGCGATAAGTAATGTGAATTGCAGAATTCAGTGA
ATCATCGAATCTTTGAACGCACATTGCGCCCTCTGGTATTCCGGAGGGCATGCCTGTTCRAGCGTCATTT
CAACCCTCAAGCCTGGCTTGGTGTTGGGGCACTGCTTTTCCCGAAAAGCAGGCCCTGAAATATAGTGGCG
AGCTCGCCAGGACTCCGAGCGTAGTAGTTAAACCCTCGCTCTGGAAGGCCTGGCGGTGCCCTGCCGTTAA
ACCCCAACTTCTGAAAATTTGACCTCGGATCAGGTAGGAATACCCGCTGAACTTAAGCATATCAATAASC
GGAGGATTCCT

Precisa todas pesquisadas no arquivo txt. Acho esta na variável $acumula.



8. Re: Banco de dados [RESOLVIDO]

Hector Nagao
heckjp

(usa elementary OS)

Enviado em 13/09/2017 - 13:16h

O erro está na variavel $acumula. você está sobrescrevendo ela durante o laço de repetição. O certo é você iniciar ela fora do laço e acrescentar ela com o operador de atribuição ".=" (sem aspas, claro).


9. Re: Banco de dados [RESOLVIDO]

Vinicius Araujo Lopes
viniciusalopes

(usa Debian)

Enviado em 13/09/2017 - 13:26h

Opa!
De acordo com o código que enviou, está gravando só uma porque o trecho que escreve no arquivo.txt está fora do laço que percorre os registros.
Se você colocar esse trecho que escreve o arquivo dentro do laço, funciona!
//Percorrendo e exibir registros
while ($registro = mysqli_fetch_assoc($resultado)) {
$nomeCientifico = $registro['nomeCientifico'];
$citacao = $registro['citacao'];
# (...etc...)
echo "<b>Sequência Nucléica (Fasta):</b> <br />";
echo "<br>";
echo "<textarea rows='10' cols='80' style='border: 0; '>$nt_sequencia</textarea>";
# $acumula = $nt_sequencia; <<-DESNECESSÁRIO
echo "<hr>";
echo "<hr>";
echo "<br>";
echo "<br>";
$i++;

//Salvar em arquivo .txt as consultas dos usuários
$arquivo = '/home/clenivaldo/arquivo.txt';
$fp = fopen($arquivo, 'a');
fwrite($fp, $acumula);
fclose($fp);
} # << Fim do while

 __________________________________
/ Apresente soluções! \
| Opiniões não resolvem problemas. |
| |
| --Viniciusalopes /
\ ---------------------------------
\ ^__^
\ (oo)\_______
(__) )/\/
||----w |
|| ||



10. Re: Banco de dados [RESOLVIDO]

Hector Nagao
heckjp

(usa elementary OS)

Enviado em 13/09/2017 - 13:34h

Vinicius. A lógica que você descreveu está correta. Mas executar o fopen e fclose dentro do laço de repetição não geraria abertura de arquivo desncessária? Digo.. deixar os comandos fopen e fclose fora do laço usando apenas o fwrite que é o que importa para o arquivo.


11. Re: Banco de dados [RESOLVIDO]

Vinicius Araujo Lopes
viniciusalopes

(usa Debian)

Enviado em 13/09/2017 - 13:35h

heckjp escreveu:
O erro está na variavel $acumula. você está sobrescrevendo ela durante o laço de repetição. O certo é você iniciar ela fora do laço e acrescentar ela com o operador de atribuição ".=" (sem aspas, claro).


É... pensando bem, a atribuição ".=" também é uma boa solução. Só tem um detalhe: salvando na variável $acumula, dependendo da quantidade de registros e do tamanho das strings de cada registro, essa variável $acumula utilizará bastante memória do servidor, podendo até exceder a quantidade de caracteres da variável. Também levaria mais tempo para escrever no arquivo .txt, podendo ocorrer erro de 'tempo-limite'.

Opinião não resolve problema mas, eu escreveria a cada volta no laço, conforme meu exemplo acima; dessa forma, utilizaria mais vezes o processamento e o disco, mas não correria o risco de estourar em tamanho.

 __________________________________
/ Apresente soluções! \
| Opiniões não resolvem problemas. |
| |
| --Viniciusalopes /
\ ---------------------------------
\ ^__^
\ (oo)\_______
(__) )/\/
||----w |
|| ||



12. Re: Banco de dados [RESOLVIDO]

Vinicius Araujo Lopes
viniciusalopes

(usa Debian)

Enviado em 13/09/2017 - 14:04h

heckjp escreveu:
Vinicius. A lógica que você descreveu está correta. Mas executar o fopen e fclose dentro do laço de repetição não geraria abertura de arquivo desncessária? Digo.. deixar os comandos fopen e fclose fora do laço usando apenas o fwrite que é o que importa para o arquivo.


Concordo plenamente! Não tinha me atentado a isso. Ficaria melhor assim então:
        # Cria e abre o arquivo .txt para salvar os registros da consulta
$arquivo = '/home/clenivaldo/arquivo.txt';
$fp = fopen($arquivo, 'a');

//Percorrendo e exibir registros
while ($registro = mysqli_fetch_assoc($resultado)) {
$nomeCientifico = $registro['nomeCientifico'];
$citacao = $registro['citacao'];
# (...etc...)
echo "<b>Sequência Nucléica (Fasta):</b> <br />";
echo "<br>";
echo "<textarea rows='10' cols='80' style='border: 0; '>$nt_sequencia</textarea>";
# $acumula = $nt_sequencia; <<-DESNECESSÁRIO
echo "<hr>";
echo "<hr>";
echo "<br>";
echo "<br>";
$i++;

# Escreve no arquivo .txt o registro atual da consulta
fwrite($fp, $acumula);
} # << Fim do while

# Fecha o arquivo .txt
fclose($fp);


Dessa forma utilizaria menos disco e processador ainda...

 __________________________________
/ Apresente soluções! \
| Opiniões não resolvem problemas. |
| |
| --Viniciusalopes /
\ ---------------------------------
\ ^__^
\ (oo)\_______
(__) )/\/
||----w |
|| ||




01 02



Patrocínio

Site hospedado pelo provedor HostGator.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Viva o Android

Tópicos

Top 10 do mês

Scripts