mostrar solo un registro

Manuel
06 de Marzo del 2002
Hola. Necesito ayuda con esto. decidí escribir el proceso paso a paso ya que puedo haber cometido un error desde el principio.


Tengo una aplicación con base de datos relacional, no es una aplicación donde se maneje información crucial;
es acerca de un mall el cual tiene un cine con tres salas, cada una con una pelicula distinta (hipoteticamente hablando,
es sólo un ensayo) y para eso, hice una tabla de cines que contiene el nombre del cine, y datos anexos como la dieccion, etc.
esta tabla tiene tres tablas para cada sala, cada una con sus correspondientes datos: id, film (nombre de la pelicula),
link (a un comentario), afiche (a su imagen correspondiente), fecha (de estreno), calif (calificacion) y otros datos anexos....

Pues bien: hasta el momento, con un solo registro, las cosas andan bien. construí una pagina en la cual pedía los datos de todas las salas
basándome en la tabla cines...para eso, formulé la siguiente consulta sql ayudado por access: (la desglosaré para que sea facil de leer)

SELECT
sala1.id as sala1_id,
sala2.id as sala2_id,
sala3.id as sala3_id,
cines.nombrecine AS cines_nombrecine,
cines.pisocine,
cines.localcine,
sala1.film1,
sala1.fecha AS sala1_fecha,
sala1.afiche AS sala1_afiche,
sala1.calif AS sala1_calif,
sala1.nombrecine AS sala1_nombrecine,
sala1.link as sala1_link,
sala2.nombrecine AS sala2_nombrecine,
sala2.film2, sala2.fecha AS sala2_fecha,
sala2.afiche AS sala2_afiche,
sala2.calif AS sala2_calif,
sala2.link as sala2_link,
sala3.nombrecine AS sala3_nombrecine,
sala3.film3, sala3.fecha AS sala3_fecha,
sala3.afiche AS sala3_afiche,
sala3.calif AS sala3_calif,
sala3.link as sala3_link
FROM
((cines INNER JOIN sala1 ON cines.nombrecine = sala1.nombrecine)
INNER JOIN sala2 ON sala1.nombrecine = sala2.nombrecine)
INNER JOIN sala3 ON sala2.nombrecine = sala3.nombrecine"

y después pido los datos (ej: sala1_nombrecine, etc) y todo funciona perfectamente.
El problema llegó cuando las tablas -sala- tenían más de un registro, ya que quería mostrar sólo el último registro.
Lo lógico es que me guíe por el id de cada tabla -sala- pero he preguntado en distintos foros y no he podido conseguir buenos resultados...
pensaba que podía, al hacer un loop, decirle que si el loop era mayor a 1 entonces eof....pero los datos no van dentro de una tabla con tr y td,
porque son datos de distintas tablas que se imprimen por separado....así que esta opcion quedó desechada...
he tratado con max, last y limit....pero la sintaxis está mal ocupada (debe ser) porque reclama siempre...

Ok, perdona la inexperiencia, espero que todo esto le sirva a más de alguien.

Gracias.

Manolo
06 de Marzo del 2002
No se si te servira de alluda pues soy de Oracle
y el SQL no parece el mismo.Pero lo intentare.
-Primero porque no haces el join de la siguiente
manera: cines.nombrecine = sala1.nombrecine
cines.nombrecine = sala2.nombrecine
cines.nombrecine = sala3.nombrecine
relacionalmente creo que seria lo mas normal,
aunque de momento esto no te soluciona el
problema.
-Segundo en la 'WHERE' tienes que hacer
SubSelects(que palabra).Ejemplo:
sala1.id = (select MAX(sala1b.id)
from sala1 sala1b
where sala1b.nombrecine =
sala1.nombrecine)
sala2.id = (select MAX(sala2b.id)
from sala2 sala2b
where sala2b.nombrecine =
sala2.nombrecine)
sala3.id = (select MAX(sala3b.id)
from sala3 sala3b
where sala3b.nombrecine =
sala3.nombrecine)

Esto funciona en SQL de Oracle, yo no se si esto se puede hacer en ACCESS.

Buena suerte y saludos