Pagina 5 di 5 primaprima ... 3 4 5
Visualizzazione dei risultati da 41 a 47 su 47

Discussione: query inner join

  1. #41
    Originariamente inviato da andr3a
    qualunque tabella prendo come riferimento iniziale MAX( tabella.data_fine ) il risultato non cambia ...
    scherzavo


    questa pero' dovrebbe andare davvero ... sempre ammesso che ci sia almeno una data uguale in ogni campo data_fine per ogni tabella ...


    SELECT MAX( banner.data_fine ), MAX( banner2.data_fine ), MAX( banner3.data_fine ), MAX( banner4.data_fine ), MAX( banner5.data_fine ), MAX( banner6.data_fine ), MAX( banner7.data_fine ), MAX( banner8.data_fine ) FROM banner, banner2, banner3, banner4, banner5, banner6, banner7, banner8 WHERE banner.data_fine = banner2.data_fine AND banner2.data_fine = banner3.data_fine AND banner3.data_fine = banner4.data_fine AND banner4.data_fine = banner5.data_fine AND banner5.data_fine = banner6.data_fine AND banner6.data_fine = banner7.data_fine AND banner7.data_fine = banner8.data_fine
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  2. #42
    Originariamente inviato da massimo80
    ho capito tutto, ma la tabella come la faccio?
    cioè ho capito che deve contenere una data di riferimento, ma dovrebbe inserire la data più alta presente nelle tabelle??? Oppure ho capito male???
    Non so se ho capito esattamente quello che ti serve.... In pratica dato una giorno tu vuoi sapere la condizione dei banner rispetto a quel giorno. Ma vuoi sapere solo la data = o che piu' si avvicina (la massima precedente). Per fare questo devi avere un punto di paragone certo. Per evitare risultati cartesiani devi usare LEFT (o RIGHT) JOIN. Nella valutazione ON compari ogni tabella con una data certa che stabilisci con having, Ma la data deve esserci nella tabella di comparazione, oppure ti falsa il max di tutte le altre. Ecco il perche' di una tabella calendario con un record per giorno, dal 2004-01-01 al 2004-12-31. la ricerca la farai basandoti su questa tabella di comparazione, es.:

    SELECT max(b1.data_fine) d1 .....
    FROM bannerX bx
    LEFT JOIN banner1 b2 ON b1.data_fine = bx.data_fine
    ....
    HAVING bx.data_fine = '2004-11-14'

    In questo modo stabilisci il valore di bannerX.data_fine e di conseguenza il limite MAX per tutte le data_fine delle altre tabelle (ON b1.data_fine = bx.data_fine ). Il risultato in d1 sara' il valore che piu' si avvicina fino al max uguale al tetto della data definita in having. In altre parole la data che cerchi deve essere sicuramente presente, altrimenti riceverai dei gran NULL. Per essere certo che ci sia ci vuole una tabella calendario. Oppure una delle tue tabelle e' una tabella guida per la data delle altre.

    Sto parlando per teoria perche' non ho provato, magari serve dover usare operatori diversi (es.: <= ) ma il concetto e' quello.

    Diversamente dovresti fare una query per estrarre la MAX(data_fine) di tutte le tabelle e poi utilizzare quella tabella per il confronto delle altre. Ma non mi pare sia quello che cerchi.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #43
    Originariamente inviato da massimo80
    si ma hai usato = prova <= perchè io non ho per forza tutte le date uguali, potrei come in esempio scritto prima avere delle zone con banner pianificati per più tempo e altri no.
    allora ti serve un riferimento .. come dice piero ...


    cioe', tu vuoi un range di date, non ha senso comparare le altre alla massima di banner1 .... perche' potrebbero essere tutte inferiori al massimo valore trovato in banner.data_fine ...
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #44
    Originariamente inviato da piero.mac
    Non so se ho capito esattamente quello che ti serve.... In pratica dato una giorno tu vuoi sapere la condizione dei banner rispetto a quel giorno. Ma vuoi sapere solo la data = o che piu' si avvicina (la massima precedente).
    esattamente così. ma se io sapessi a priori la data massima da dove partire e la setto su una variabile, potrebbe funzionare lo stesso?

    ovviamente mica la facio a mano ma la prendo da una delle tabelle, e la prendo come riferimento.

    cosa dici?

  5. #45
    Originariamente inviato da massimo80
    esattamente così. ma se io sapessi a priori la data massima da dove partire e la setto su una variabile, potrebbe funzionare lo stesso?

    ovviamente mica la facio a mano ma la prendo da una delle tabelle, e la prendo come riferimento.

    cosa dici?
    Se la variabile la usa nell'having certamente.... Ma non nella join. Li compari una colonna intera e non un singolo valore.

    prova anche <= nell'having...

    LEFT JOIN banner1 b2 ON b1.data_fine = bx.data_fine
    ....
    HAVING bx.data_fine <= '$data_fine'

    Non ho il tempo materiale per farlo altrimenti proverei, ma son certo che cosi' funzionera' bene (con una tabella di date).


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #46
    questa fa strane cose ... pero' qualcosa fa



    SELECT MAX( banner.data_fine ) , MAX( banner2.data_fine ) , MAX( banner3.data_fine ) , MAX( banner4.data_fine ) , MAX( banner5.data_fine ) , MAX( banner6.data_fine ) , MAX( banner7.data_fine ) , MAX( banner8.data_fine )
    FROM banner
    LEFT JOIN banner2 ON banner.data_fine = banner2.data_fine
    LEFT JOIN banner3 ON banner.data_fine = banner3.data_fine AND banner2.data_fine = banner3.data_fine
    LEFT JOIN banner4 ON banner.data_fine = banner4.data_fine OR banner2.data_fine = banner4.data_fine AND banner3.data_fine = banner4.data_fine
    LEFT JOIN banner5 ON banner.data_fine = banner5.data_fine OR banner2.data_fine = banner5.data_fine OR banner3.data_fine = banner5.data_fine AND banner4.data_fine = banner5.data_fine
    LEFT JOIN banner6 ON banner.data_fine = banner6.data_fine OR banner2.data_fine = banner6.data_fine OR banner3.data_fine = banner6.data_fine OR banner4.data_fine = banner6.data_fine AND banner5.data_fine = banner6.data_fine
    LEFT JOIN banner7 ON banner.data_fine = banner7.data_fine OR banner2.data_fine = banner7.data_fine OR banner3.data_fine = banner7.data_fine OR banner4.data_fine = banner7.data_fine OR banner5.data_fine = banner7.data_fine AND banner6.data_fine = banner7.data_fine
    LEFT JOIN banner8 ON banner.data_fine = banner8.data_fine OR banner2.data_fine = banner8.data_fine OR banner3.data_fine = banner8.data_fine OR banner4.data_fine = banner8.data_fine OR banner5.data_fine = banner8.data_fine OR banner6.data_fine = banner8.data_fine AND banner7.data_fine = banner8.data_fine


    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  7. #47
    Originariamente inviato da andr3a
    questa fa strane cose ... pero' qualcosa fa
    hehehehehe...... tra un pò mi ci vuole una pagina per una query.hehehe :--)

    provo con lo script di pero.mac, poi se non funzia mi rifaccio vivo.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.