[Cascavel-pm] DBI
Luis Motta Campos
luismottacampos em yahoo.co.uk
Segunda Janeiro 21 10:11:41 PST 2008
Rodrigo Panchiniak Fernandes wrote:
> Salve,
>
> Numa das colunas da minha tabela há strings repetidas.
> Eu queria que dump_results mostrasse apenas as linhas
> nas quais ocorre a repetição.
>
> Algo como:
> "SELECT
> coluna1 TEXT
> FROM user
> WHERE
> /linha anterior/ =~ /linha atual/
> ORDER BY
> coluna1 desc";
>
> Alguém pode explicar uma forma simples de fazer isto?
ARGH. Teu query:
SELECT coluna1 AS "Texto Repetido"
FROM user u
WHERE u.coluna1 = ?
ORDER BY u DESC
Isso vai te trazer todos os usuários repetidos na sua tabela agrupados.
Agora, você parece ter um problema de exibição: quer exibir espaços em
branco sempre que o valor de "coluna1" for o mesmo da linha anterior, certo?
Teu código (ATENÇÃO: EU NÃO TESTEI!)
#!perl
use strict;
use warnings;
use DBI;
my $dbh = DBI->connect( "DBI:mysql:database", 'mysql_user', 'secret', {
AutoCommit => 1, RaiseError => 1, PrintError => 0 } );
my $query = ; <<SQL
SELECT coluna1 AS "Texto Repetido"
FROM user u
WHERE u.coluna1 = ?
ORDER BY u DESC
SQL
my $sth = eval { $dbi->prepare( $query ) } or die DBI->errstr;
eval{ $sth->execute( 'valor procurado' ) } or die $sth->errstr;
my $current_value = ''; # sim, faz assim, evita warnings de "undef"
while( ( $value ) = $sth->fetchrow_array ){
if( $current_value eq $value ){
# mesma coisa que a linha anterior
print $/;
}else{
# linha diferente
print $value;
} # if-else
} # while
eval{ $sth->finish } or die $sth->errstr;
$dbi->close or die $DBI->errstr;
__END__
Espero que isso ajude.
Putamplexos!
--
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}
Mais detalhes sobre a lista de discussão Cascavel-pm