Innanzi tutto grazie per le risposte.
Ora cerco di rispiegarvi un attimo cosa voglio fare esattamente.
Partiamo dal fatto che il sito è multilingua.
Le lingue esistenti sul sito sono memorizzate nel db in una tabella che ha tre campi: id, lang, abbreviation
Il campo id è autoincrement
lang memorizza il nome della lingua (italiano, english, ecc.)
abbreviation memorizza l'abbreviazione della lingua (it, en, ecc.)
Il catalogo ha, invece, più tabelle con più campi:
catalog_brands (id, brand) (memorizza le marche senza multilingua)
catalog_materials (id, ref, material, lang) (memorizza i materiali)
catalog_objects (id, ref, object, lang) (memorizza i tipi di oggetti)
catalog_targets (id, ref, target, lang) (memorizza i target: uomo, donna, bambino, ecc)
Fatto questo quadro panoramico passiamo al problema.
L'utente può scegliere la lingua in cui desidera visualizzare il sito. Le lingue ora sono solo due (italiano ed inglese).
Ma l'amministratore potrebbe non aver inserito tutti i dati in tutte le lingue! Ciò vuol dire che, per assurdo, un target potrebbe essere definito in italiano ma non in inglese come potrebbe essere definito in inglese ed in italiano. La lingua sicuramente presente sarà l'italiano (quella che io ho chiamato lingua di default).
Quando vado ad estrarre i dettagli di un prodotto, quindi, devo estrarre i dati nella lingua richiesta: se è italiano estraggo i dati in italiano mentre se è inglese estraggo i dati in inglese. la clausola where, quindi, sarebbe così (ammettendo che it = 1 e en = 2) qualora l'utente abbia scelto l'inglese come lingua da visualizzare:
codice:
WHERE catalog_objects.lang = 2
AND catalog_materials.lang = 2
AND catalog_targets.lang = 2
Fin qui nessun problema: i dati vengono estratti correttamente.
Ma che succederebbe se l'admin non avesse impostato i valori in inglese per uno dei campi? Non verrebbe visualizzato niente! Ecco che entra in gioco la clausola where:
codice:
WHERE catalog_objects.lang = 2 (o se inesistente catalog_objects = 1)
AND catalog_materials.lang = 2 (o se inesistente catalog_materials = 1)
AND catalog_targets.lang = (o se inesistente catalog_targets = 1)
Se il dato non esiste in inglese estrae quello in italiano (che è considerata lingua di default)
Non mi interessa controllare prima se ogni tabella ha anche la parte nella lingua selezionata. Il controllo va effettuato tabella per tabella (quindi avrei una pagina diciamo multilingua, in inglese ed in italiano contemporaneamente).
Spero di essere stato più chiaro adesso!
PS
Avrete notato che alcune tabelle hanno un campo "ref". Quello è il campo utilizzato per effettuare la join poichè gli id sono autoincrement e quindi non avrei potuto memorizzarli nel campo apposito che memorizza i prodotti.