Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Reiuky
    Registrato dal
    Jul 2008
    Messaggi
    371

    Esplicitare l'origine di un record estratto

    Ciao a tutti.

    Ho questo problema un po' intrecciato da spiegare e da ragionarci.

    Fino a pochi anni fa avevo una query mostruosa che doveva recuperare una serie di pagine dalla join di 3 o 4 tabelle (a seconda di impostazioni date da altre parti). Questa query era composta dalla union di una mezza dozzina di query tutte quasi uguali, in cui cambia solo una condizione sulla where (anche qui abbastanza complessa).

    Siccome questa query mastodontica mi rallentava parecchio il programma, l'ho riscritta come un'unica select in cui vengono unificate tutte le where. Il tempo che il programma impiega per costruire questa query più sofisticata è stato ampiamente recuperato dall'estrazione enormemente più veloce (in media queste query tirano su un 500 risultati).
    Oltre alle prestazioni, ho anche risolto il problema dei record doppi.

    Fin qui tutto bene.

    Solo che oggi mi si chiede di sapere da quale condizione viene fuori ogni singolo record.

    Se pochi anni fa non avessi toccato la union, era facile. Bastava aggiungere un progressivo su ogni select della union in modo da sapere da quale select è venuto fuori (anzi, mi pare che già ci fosse).


    La mia domanda è: posso ottenere lo stesso risultato partendo dall'unica query di cui sopra senza appesantire eccessivamente con subquery? O sono costretto a tornare indietro sulle modifiche di qualche anno fa (facendo attenzione a mantenere le modifiche più recenti)?

    Grazie.
    A volte penso che, nel darci l'intelletto, la natura sia stata più sadica che generosa.

  2. #2
    Utente di HTML.it L'avatar di Reiuky
    Registrato dal
    Jul 2008
    Messaggi
    371
    Volevo aggiungere che la query, attualmente, è fatta all'incirca così:
    codice:
    SELECT (una serie di campi che mi servono sempre), (concatenazione di campi che potrebbero servirmi), (campo per l'ordinamento) AS dataORD
    FROM (tabella1 JOIN tabella2 JOIN tabella3)
    WHERE (condizioni che mi servono sempre) AND
    (
      (Condizione elemento 1) OR
      (Condizione elemento 2) OR
      (Condizione elemento 3) OR
      (Condizione elemento 4)
    )
    Io ho bisogno di sapere da quale condizione è estratto il singolo record
    A volte penso che, nel darci l'intelletto, la natura sia stata più sadica che generosa.

  3. #3
    Anziché spiegare così genericamente, potresti dirci quali sono i campi e cosa deve fare la query ed eventualmente una riga di esempio? Perché raccontarci la storia di Adamo ed Eva non è molto utile per aiutarti, quanto lo sarebbe una spiegazione dettagliata del problema

  4. #4
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    e se tu usassi case?
    una cosa tipo
    codice:
    SELECT CASE mese
        WHEN 1 THEN 'Gennaio'
        WHEN 2 THEN 'Febbraio'
        ...
        END
        AS campoRecuperato
    ... 'resto della query
    mettendo nel when le stesse condizioni della where
    premetto che non ci ho mai provato

  5. #5
    Utente di HTML.it L'avatar di Reiuky
    Registrato dal
    Jul 2008
    Messaggi
    371
    Funziona?

    Alla fine abbiamo optato per una soluzione che non coinvolga la query (che funziona di meno, ma pare che funzioni).

    Però questa me la devo studiare. grazie.
    A volte penso che, nel darci l'intelletto, la natura sia stata più sadica che generosa.

  6. #6
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    funziona funziona, ho appena provato

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.