[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