PDA

View Full Version : [PHP+mysql] Problema con inner join complessa


porny^n+1
11-04-2007, 16:43
Salve a tutti,
ho un enorme problema con una JOIN abbastanza complessa. Ho le seguenti tabelle:

galleries -> gallery_id, gallery_title, sponsor_id, site_id
site -> site_id, site_name, site_url
sponsors -> sponsor_id, sponsor_name, sponsor_url
links -> link_id, link_url, link_name, sponsor_id, site_id
templates -> template_id, template_desc, sponsor_id, site_id

Tramite browser viene passato un URL che successivamente viene splittato in piu' valori e sitemato in variabili:

http://www.url.com/01/sponsorname/02/sitename/2255/01/01/questa-galleria-fa-schifo

Andando in ordine:

01 -> id sponsor -> $sponsorid
sponsorname -> nome sponsor -> $sponsorname
02 -> id sito -> $siteid
sitename -> nome sito ->$sitename
2255 -> id galleria -> $galleryid
01 -> id template -> $templateid
01 -> link id -> $linkid

Ho la necessita' di eseuire un controllo sui dati inseriti confrontandoli con i dati presenti all'interno del database tenedendo presente che:
- una galleria puo' avere link differenti passati tramite url ma questo link e' valido solo se sponsor_id e site_id della tabella links corrispondono a sponsor_id e site_id della tabella galleries
- una galleria puo' avere template differenti passati tramite url ma questo template e' valido se sponsor_id e site_id della tabella template corrispondono con site_id e sponsor_id della tabella galleris

Io ho abbozzato una query mostruoso ed alquanto inutile credo:

SELECT galleries.gallery_id, galleries.gallery_title, galleries.sponsor_id, galleries.site_id, sponsors.sponsor_id, sponsors.sponsor_name, sites.site_id, sites.site_name, links.link_id, links.link_url, links.sponsor_id, links.site_id, templates.template_id, templates.sponsor_id, templates.site_id
FROM galleries
INNER JOIN sponsors ON galleries.sponsor_id = sponsors.sponsor_id AND sponsors.sponsor_id = $sponsor_id AND sponsor.sponsor
INNER JOIN sites ON galleries.site_id = sites.site_id
INNER JOIN links ON galleries.site_id = links.site_id AND galleries.sponsor_id = links.site_id AND links.link_id = $link_id
INNER JOIN templates ON galleries.site_id = templates.site_id AND galleries.sponsor_id = templates.sponsor_id AND templates.template_id = $template_id
WHERE galleries.gallery_id = $gallery_id AND galleries.gallery_title = '".strtolower($gallery_title_full)."'";


Grazie.
Cordiali saluti.

yorkeiser
12-04-2007, 11:57
SELECT a.gallery_id, a.gallery_title, ...
FROM galleries AS a, sponsors as b, ...
WHERE
a.sponsor_id = b.sponsor_id AND
b.sponsor_id = $sponsor AND
...