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

    [Access&Vbscript]problema risposta query

    Ciao a tutti.Sono ancora al lavoro sul mio vecchio progetto ,che alcuni di voi leggendo i miei vecchi post conoscono .Adesso il progetto non ha piu riferimenti hai post vecchi ,perchè e stato stravolto ,grazie all'aiuto delle comunità come la vostra ,che veramente ringrazio che esistano ,che mi hanno aiutato a comprendere alcuni meccanismi della programmazione .
    Ma a parte i complimenti dovutissimi a tutti voi .Torniamo a noi ! Anzi ai miei problemi di comprendonio
    Ho un Database di nome DB.mdb (quindi Access)
    Nel database ci sono due tabelle
    Clienti Annunci
    in clienti ho i campi con i corrispettivi (tipi di dato)
    id(contatore),Nome(testo) ,indirizzo(testo),tipo(testo)

    in Annunci ho i campi:
    id_annunci(contatore),id_clienti(numerico),annunci o(testo),settimana(numerico),giorno(testo),ora(tes to)

    Nelle tabelle ci sono questi record:
    Clienti
    id , Nome , indirizzo , tipo
    1 , pippo , via1 , pub
    2 , pluto , via2 , pub
    3 , topo , via3 , pub
    4 , loto , via4 , pub
    Annunci
    id_annunci, id_clienti, annuncio, settimana, giorno, ora
    1 , 1 , esem , 10 , lunedi, sera
    2 , 1 , esem2 , 10 , lunedi, giorno

    eseguendo questa query:

    codice:
    "SELECT * FROM Clienti inner join  Annunci ON Clienti.ID=Annunci.ID_Clienti WHERE  Clienti.tipo ='pub' and Annunci.settimana = 10 and Annunci.giorno = 'lunedi' and Annunci.ora =  'giorno'  ORDER BY Clienti.citta,  Clienti.nome  "
    risposta:
    Nome ,indirizzo,annuncio
    pippo , via1 , esem2

    invece quello che vorrei ,ma non riesco a capire come ottenere, una risposta così:
    Nome ,indirizzo,annuncio
    pippo , via1 , esem2
    pluto , via2
    topo , via3
    loto , via4

    Dove visualizzo tutti i tipi richiesti e solo gli annunci che hanno i criteri che ci sono nella select sopra .
    Spero di essermi spiegato :S
    anche se ne dubito ,comunque chiedetemi cosa non è chiaro

  2. #2
    è perché fai una INNER JOIN (che riporta risultati solo se i due elementi della JOIN...ON corrispondono)

    fa' una LEFT JOIN che ti riporta tutti gli elementi della tabella di sinistra, anche se non ha corrispondenze con la tabella di destra. attento che a destra (negli elementi non corrispondenti) avrai tutti NULL


  3. #3
    Grazie optime! Sempre disponibile e pronto!

    Avevo letto del left e right join ed ho provato ad applicarlo ,ma il risultato e sempre 1 record ,ho usato ,come dici tu left con queste due sintassi:

    1.LEFT JOIN
    codice:
    "SELECT *
    FROM Clienti LEFT JOIN   Annunci 
    ON Clienti.ID=Annunci.ID_Clienti 
    WHERE  Clienti.tipo ='pub' and Annunci.settimana = 10 and Annunci.giorno = 'lunedi' and Annunci.ora =  'giorno'  
    ORDER BY Clienti.citta,  Clienti.nome  "
    2.LEFT OUTER JOIN
    codice:
    "SELECT *
    FROM Clienti LEFT OUTER JOIN   Annunci 
    ON Clienti.ID=Annunci.ID_Clienti 
    WHERE  Clienti.tipo ='pub' and Annunci.settimana = 10 and Annunci.giorno = 'lunedi' and Annunci.ora =  'giorno'  
    ORDER BY Clienti.citta,  Clienti.nome  "
    :master:

  4. #4
    il fatto è che tu metti la selezione di annunci nella where. mettila nella JOIN

  5. #5
    Originariamente inviato da optime
    il fatto è che tu metti la selezione di annunci nella where. mettila nella JOIN
    Prima di risponderti e romperti ancora con le mie domande, ho fatto una lunga ricerca su come mettere le clausole di where nel join ma non ho trovato riscontri .Sono quasi le tre e mi arrendo per oggi
    A prima vista vedendo la tua risposta mi è venuto da scrivere cosi

    1
    Codice PHP:
    FROM Clienti LEFT OUTER  JOIN annunci ON Clienti.ID=Annunci.ID_Clienti and  Annunci.settimana and  Annunci.giorno 'lunedi' and   Annunci.ora =  'giorno'  WHERE  Clienti.tipo 'pub' " 
    poi mi sono inventato questa
    2
    Codice PHP:
    FROM Clienti LEFT OUTER  JOIN annunci ON Clienti.ID=Annunci.ID_Clienti ,  Annunci.settimana ,  Annunci.giorno 'lunedi' ,   Annunci.ora =  'giorno'  WHERE  Clienti.tipo 'pub' " 
    Qua ho tirato fuori tutta la fantasia
    3
    Codice PHP:
    FROM Clienti LEFT OUTER  JOIN (select from annunci where  Annunci.settimana and  Annunci.giorno 'lunedi' and   Annunci.ora =  'giorno'  )ON Clienti.ID=Annunci.ID_Clienti WHERE  Clienti.tipo 'pub' " 
    senza ottenere un briciolo di risultato, manco cercando in giro ho trovato cose simili ,anzi una sintassi tipo la prima l'ho trovata ma non funziona dandomi l'errore (Espressione JOIN non supportata.)
    pero' se nella prima ,query che ho scritto ,cambio gli operatori AND in OR un risultato sballato l'ho ottengo
    per essere chiari cosi :
    1.a
    Codice PHP:
    FROM Clienti LEFT OUTER  JOIN annunci ON Clienti.ID=Annunci.ID_Clienti or  Annunci.settimana or  Annunci.giorno 'lunedi' or   Annunci.ora =  'giorno'  WHERE  Clienti.tipo 'pub' " 
    Certo che non è facile diventare un programmatore ,a volte ci sono meccanismi arcani che ti fanno impazzire, se non ci fossero i forum uno come me, come fa' ad imparare? tante cose non sono scritte da nessuna parte o se ci sono sono spiegate a livelli base
    Sarò anch'io un po' testone ma senza di voi sarei perso

  6. #6
    fammi avere in qualche modo un estratto del db, che ti preparo la query

  7. #7
    Originariamente inviato da optime
    fammi avere in qualche modo un estratto del db, che ti preparo la query
    Ti ho mandato il link dell'estratto del DB in privato ,spero intendevi quello che che ho inteso
    Sappi optime che non concordo su un codice bello e pronto ,mi basterebbe la sintassi per l'occasione mostrata .

    Ti avevo chiesto un favore in pvt, ma sono stato beccato ,quindi l'ho infranto io .Ti chiedo qua ancora un favore, dimmi quando hai scaricato il DB così lo posso togliere

  8. #8
    prova con

    SELECT *
    FROM CLIENTI TC LEFT JOIN ANNUNCI TA ON (TC.ID=TA.ID_CLIENTI and TC.tipo ='pub' and TA.settimana = 10 and TA.giorno = 'lunedi' and TA.ora = 'giorno' )
    ORDER BY tc.citta, ta.nome

  9. #9
    Originariamente inviato da optime
    prova con

    SELECT *
    FROM CLIENTI TC LEFT JOIN ANNUNCI TA ON (TC.ID=TA.ID_CLIENTI and TC.tipo ='pub' and TA.settimana = 10 and TA.giorno = 'lunedi' and TA.ora = 'giorno' )
    ORDER BY tc.citta, ta.nome
    Come sempre optime, vinci tu
    Funziona!
    Pero questa sintassi è veramente un arcano ,uno che studia da autodidatta dove trova una sintassi del genere? quale libro ti fa apprendere a pieno i vari meccanismi e sintassi della programmazione,in questo caso ASP(VBscript) anzi il linguaggio sql giusto ?
    Va beh comunque sia ,forse ho finito e a breve avvieremo il sito .
    Dopodiché mi dedicherò allo studio di php ,trasformando quello che ho fatto nel nuovo linguaggio

  10. #10
    ogni tanto ci vuole un po' di fantasia, oltre a conoscere la sintassi e i meccanismi.

    la 'ON' della JOIN fa più o meno quello che fa la WHERE, ma interviene un po' prima, e quindi seleziona i record delle tabella di sinistra e di destra (sx e dx rispetto alla parola JOIN) prima di ottenere la tabella di risulta. la 'WHERE' interviene un attimo più tardi, quando la tabella di risulta è già ottenuta, e quindi elimina i record che non corrispondono (anche quelli che invece a te servivano).

    ragionaci un pochettino sopra, fatti due disegnini (non è una presa in giro, aiutano davvero!) e vedrai che il giro ti sarà chiaro.

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.