Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    116

    unire risultato di query differenti

    Salve a tutti,
    ho questo problemino:
    risultato query1 => codice_articolo TOT_venduto_2007
    risultato query2 => codice_articolo TOT_venduto_2008

    E' possibile con un'unica query avere questo tipo di risultato?
    Cioè => codice_articolo TOT_venduto_2007 TOT_venduto_2008

    Questo per evitare di avere due query differenti per poi creare codice PHP ad hoc per ottenere il risultato voluto.

    Grazie per le info

  2. #2
    puoi usare una UNION o una UNION ALL per ottenere quello che vuoi, ovviamente i campi ritornati dalle 2 query devono essere identici
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    116
    No forse non mi sono spiegato....

    Se provo a fare la UNION o la UNION ALL non mi aggiunge colonne ma solo righe...

    Il mio intento era quello di creare tramite una unica query questo risultato
    codice_articolo TOT_venduto_2007 TOT_venduto_2008
    11111111 15 18
    22222222 7 3

    Di solito per fare ciò eseguo due query che raggruppa i risultati tramite data e poi tramite php , univo il tutto.
    Siccome a livello computazionale la seconda soluzione è lenta (esegue due query simile), volevo sapere se SQL prevede una cosa che ho descritto.

    Fino ad ora l'unica cosa che si avvicina è la UNION ma essa unisce record no colonne....

    Spero di essermi spiegato...

  4. #4
    Prova a crearti una VISTA delle tabelle che vuoi unire!
    Selezioni le colonne delle varie tabelle e le unisci in una unica vista!

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  5. #5
    si ma la vista comporta una query che faccia il lavoro, e qui il problema è la query

    non so, potresti provare con una JOIN

    tu estra UN solo rigo?

    se si nella condizione potresti mettere 1 OR 1 (se lo prende)

    ma considera che una situazione dov'è presente più di una rig acomporta che ogni riga di sinistra avrà a destra associati tutti i risultati

    alternativamente puoi non usare le join e affiancare semplicemente le colonne da diverse tabelle con il where

    (nota, considera che la join la puoi eseguire su se stessa)

    ------
    però non capisco xche nn vada bene la union :\ guarda che l'espansione orizzontale è molto più che sconsigliata!!! E se devi aggiungere il 2009? ... il 2010? :\

    Ti conviene che inserisci una colonna fittizzia, statica o letta/ricostruita da qualche campo, che indichi la data di appartenenza per quei dati record cosi sai a chi appartengono
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  6. #6
    :master: Boh penso che allora non ho proprio capito quello che viene chiesto.
    Scusatemi!
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    A livello concettuale dovrebbe essere una cosa di questo genere ma come ti hanno già detto ti conviene formattare la visualizzazione della tabella tramite php.


    codice:
    select codice_articolo, 
    max(case when anno = 2007 then totale else null end) as tot2007,
    max(case when anno = 2008 then totale else null end) as tot2008
    from (
    select *,'2007' as anno from tabella2007
    union all
    select *,'2008' as anno from tabella2008 ) as tab
    group by codice_articolo

  8. #8
    non so se usare le nested queries possa convenire, soprattutto perché non tutte le versioni di mysql le supportano e non sappiamo quale usa lui

    SELECT MAX(totale) AS max_totale, '2007' AS anno FROM tabella2007
    UNION ALL
    SELECT MAX(totale) AS max_totale, '2008' AS anno FROM tabella2008

    cosi dovrebbe essere riformattata senza subquery

    semplicemente poi da php verifichi se la riga corrente è la 2007 o la 2008

    inoltre se fai un qualcosa tipo

    SHOW TABLES LIKE 'prefissotabella%';

    puoi ottenere l'elenco delle tabelle che riguardano la tua contabilità, però considera che se lo sai, anche facendo un group by sugli anni (o una distinct) è molto meglio
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    116
    Buon lunedì a tutti....

    @tutti coloro che mi hanno aiutato.

    Alla fine dei conti ho optato per creare un codice php ad hoc che riesca a fare questo.. Tutto il venerdì pomeriggio a sbattermi la testa...

    Cmq la soluzione che cercavo, almeno come spunto, era di nicola75ss...
    Ovvero unire più colonne nel risultato della query a parità di stesso codice_articolo.


    La creazione di una vista l'avevo scartata fin dall'inizio: noto che con la mia versione di Mysql 5.0.41 non è molto performante.

    Cmq giusta l'osservazione di danile_dll : non hai tutti i torti a dire per gli anni avvenire. In questo caso ho usato un piccolo trucco: nella query utilizzo le date come range di ricerca. Ovvero se l'anno che voglio tenere in considerazione è, per esempio, il 2008 allora il mio range va dal 1° di gennaio fino al 31 di dicembre.
    Il db aziendale ha 3 campi per identificare la data di registrazione,ovvero: gg, mm,aa. Giocando con questi campi ho creato una query parametrica

    Posteri il codice PHP ma sinceramente non è di qualità, è stato fatto al volo..... Se lo volete mi dite che lo posto all'istante

  10. #10
    Allora se ho capito bene tu hai una tabella, chiamiamola tabella1, che contiene codice articolo e tot_venduto_2007; hai poi una tabella, chiamiamola tabella2, che contiene codice articolo e tot_venduto_2008. E' cosi'?

    Se e' cosi' la query e':

    codice:
    SELECT tabella1.codice_articolo, tabella1.tot_venduto_2007, tabella2.tot_venduto_2008
    FROM tabella1, tabella2
    WHERE tabella1.codice_articolo = tabella2.codice_articolo

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.