[Pgsql-ayuda] Consulta

Maigualida =?iso-8859-1?Q?Mart=EDnez?= maix25@yahoo.es
Tue, 11 Sep 2001 23:40:42 -0400


Hola Ruben,

> Saludos, lista!
> en una base con dos tablas, equipos y formula
>
> equipos
> -------
> codigo          nombre
> ------------------------
> E1              Francia
> E2              Italia
> E3              Belgica
> E4              Alemania
>
> formula
> -------
> fecha           local           visitante
> ---------------------------------------
> 1               E1              E2
> 1               E3              E4
> 2               E1              E3
> 2               E2              E4
> 3               E1              E4
> 3               E2              E3
>
> necesito hacer un select de las tablas anteriores que me muestre los
> equipos a enfrentarse en determinada fecha. Por ej., para la segunda
> fecha:
>
> fecha           local           visitante
> ---------------------------------------
> 2               Francia         Belgica
> 2               Italia          Alemania
>
> alguien podra echarme una mano sobre como resolver esto?
>
> muchas gracias

    Podrias realizar un programita en perl con un par de selects
anidados, y a la salida le das formato html :=3D))) quiza existan otras
soluciones mas simples, pero ahorita se me ocurre solo esta...

Algo asi, (es una idea general de una principiante en perl):

#! /usr/bin/perl -w
use Pg;
require "cgi-lib.pl";
#Esto es solo la cabecera del html
print "Content-type: text/html\n\n";
print "<HTML>";
print "<HEAD><TITLE>Resultados</TITLE></HEAD>\n";
print "<body>";
print "<H1><P ALIGN\=3D\"CENTER\">Equipos a Jugar</P></H1>\n";
#cierre cabecera

$in=3D$ENV{'QUERY_STRING'};

# Aqui  %parametro contiene el par nombre, valor de la fecha a consultar
(viene de otra html donde # invocaste este .pl)

($clave, $valor) =3D split(/=3D/,$_);
$parametro{$clave}=3D $valor;
# $clave almacena la fecha en cuestion

# Abrimos la base de datos
$conexion=3DPg::connectdb("user=3Dpostgres password=3Dpostgresl
dbname=3Djuegos");

# Miramos si hay errores al abrir la base de datos
if($conexion->status =3D=3DPGRES_CONNECTION_BAD)
{
print "\n\nERROR DE CONEXI=D3N CON LA BASE DE DATOS\n";
exit;
}

# Obtenemos la informacion de la base de datos si la fecha no es null
if ($clave ne NULL)
{
 #Aqui obtienes el (los) nombre (s) del equipo local que jugara en la
fecha indicada
  Pg::doQuery($conexion,"SELECT nombre FROM equipos WHERE codigo in
(SELECT local FROM formula WHERE fecha=3D$clave)",\@resultados);

 #Y Aqui obtienes el (los) nombre (s) del equipo visitante que jugara en
la fecha indicada
  Pg::doQuery($conexion,"SELECT nombre FROM equipos WHERE codigo in
(SELECT visitante FROM formula WHERE fecha=3D$clave)",\@resultados);
}

# Desconectamos de la base de datos
$conexion->finish;

# Ponemos los resultados en forma de tabla.
print "<TABLE>";
print "<THEAD>";
$i=3D$#resultados
print "<TR>";

for $j (0 .. $#{$resultados[$i]})
#recorre los campos del registro
{
        print "<TH>Campo $j</TH>";
}
print "</TR>";
print "</THEAD>";
print "<TBODY>";

for $i (0 .. $#resultados)
#recorre los registros
{
        print "<TR>";
        for $j (0 .. $#{$var[$i]})
        #recorre los campos del registro
        {
                print "<TH>$resultados[$i][$j]</TH>";
        }
        print "</TR>";
}
print "</TBODY>;
print "</TABLE>;
print "</BODY>";
print "</HTML>";
# ------------------------------------------------- Fin del .pl
-----------------------------------------------------------

    Es probable que tenga algun error por alli, pero he visto que en la
lista hay varias personas que saben mucho mas que yo de perl, asi que
seguramente me corregiran en algun fallo, pero creo que esa es una
salida para que muestres los equipos a competir por fecha.
    Ojala te sirva de algo...
    Bye!

    Maigualida :=3D)