Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 30
  1. #1

    [MySQL] Esegui JOIN solo se...

    Ciao,
    ho un db un po' "incasinato" e sto cercando di risolvere questo problema:
    il campo "luogo" della tabella "tempi" può contenere un valore essenziale per la ricerca da parte dell'utente tramite una form la quale per identificare i record fa semplicemente una query WHERE 'luogo' = ...
    In alcuni casi però questo campo non contiene alcun dato poichè il luogo a cui fa riferimento è multiplo ed è stata quindi creata una tabella luoghi_tempi relazionata all'id del record la quale contiene i luogi interessati. Questa tabella contiene quindi relazioni solo ai record che presentano il campo "luogo" vuoto.
    Di conseguenza, se l'utente cerca con la form Luogo = Roma trova solo i record che nella tabella "tempi" presentano 'Roma' nel campo "Luogo" mentre vorrei trovare un modo per mostrare anche i record relazionati.

    Si può creare una QUERY sulla tabella "tempi" in modo condizionale in modo che venga sempre eseguita e nel caso di campo "luogo" vuoto si faccia una JOIN con l'altra tabella "luoghi" ??

    Spero di essermi spiegato... :master:
    Grazie !!
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

  2. #2
    non e' chiarissimo

    ma immagino che se "luogo" e' null allora "luoghi_tempi" sara' diverso da null

    quindi se fai sempre e comunque un normalissimo join su luoghi_tempi e fai un where sia su luogo che su luoghi_tempi (con l'OR) dovresti essere a posto

  3. #3
    Credo anch'io, però nel caso di un record con "luogo" nullo nella tabella tempi e n record corrispondenti nella tabella "luoghi" la query mi restituirebbe 3 record e non uno...!!
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

  4. #4
    Beh, esiste il DISTINCT

  5. #5
    In che senso ??
    Mi sa che non mi son spiegato...: una volta che l'utente esegue la ricerca lui avrà davanti a se una tabella con i risultati della ricerca eseguita, quindi righe di record con colonne coi nomi corrispondenti ai campi della tabella tempi.
    Esisterà quindi una colonna "luogo" nella quale per alcuni record il valore sarà unico, per altri (quelli relazionati alla tabella "luoghi": attenzione, la tabella luoghi non è un'anagrafica di luoghi, ma una relazione tra gli id dei record di "tempi" con gli id dei "luoghi" provenienti da una loro anagrafica e con altri id di altre tabelle ad esse relazionate) dovrà essere multiplo, ovvero dovrà essere creato un elenco dei luoghi a questo record riferiti e messo nella cella corrispondente.
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

  6. #6
    E' probabile che io abbia capito male,

    ma nel tuo precedente post dicevi che vuoi un solo record e non 3 nel caso di un record che ha corrispondenza con 3 luoghi

    E' il classico caso in cui si usa il

    SELECT DISTINCT

    che elimina i record duplicati

    Poi se invece la faccenda e' piu' complicata magari fornisci qualche info in piu'.

  7. #7
    Il problema non è scrivere la tabella, ma cercare i dati per i quali il campo "luogo" è nullo assieme a tutti gli altri !!
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

  8. #8
    e per quello basta fare un JOIN secondo me

    Qualcosa del genere, ho inventato i nomi dei campi, sii comprensivo

    SELECT DISTINCT id_tabella FROM tabella
    LEFT JOIN luoghi ON tabella.luoghi_tempi = luoghi.id
    WHERE tabella.luogo = 'everest' OR luoghi.nomeluogo = 'everest'

  9. #9
    Ma in questo modo i record inclusi in "tabella" NON relazionati con "luoghi" non rimangono esclusi ??
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

  10. #10
    il JOIN dovrebbe prendere anche i record della tabella che non sono relazionati

    provare per credere

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.