Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Sql Join (?)

  1. #1

    Sql Join (?)

    Ciao,

    Ho due tabelle, da cui devo prendere valori di alcuni campi nella stessa query, ma non ne vengo a capo.

    In pratica ho una tabella disposchede con tanti articoli divisi per famiglie, per cui N articoli con la stessa famiglia di appartenenza.

    Nella tabella offerte io creo per una determinata famiglia di articoli uno sconto generale, per cui ho una tabella del genere:
    Offerta_Codice (chiave primaria)
    Offerta_Famiglia
    Offerta_Sconto
    Il valore di Offerta_Famiglia e' preso dal campo Fam dalla tabella disposchede.

    Ho bisogno di una query, che leggendo il codice Offerta_Famiglia dalla tabella offerte, mi prenda il primo record della tabella disposchede dove Fam=Offerta_Famiglia, record da cui poter leggere DescFam ossia la descrizione della famiglia in questione.

    Da questa query nn so come limitare i risultati da disposchede:
    SELECT * FROM offerte INNER JOIN disposchede ON offerte.Offerta_Famiglia = disposchede.Fam
    e infatti ottengo n risultati per quanti articoli appartengono a quella famiglia, cosa che nn mi serve avere.

    Come faccio a leggere solo il primo DescFam da disposchede per ogni Offerta_Famiglia che ho in offerte ?

    Spero di essermi spiegato in maniera comprensibile

  2. #2
    inserisci alla fine della query

    LIMIT 1


    La programmazione...
    che passione!!..

  3. #3
    Originariamente inviato da nicodj88
    inserisci alla fine della query

    LIMIT 1


    Grazie per avere risposto innanzitutto.

    Ho provato, ma cosi' mi limita i risultati della tabella offerte (i quali mi servono tutti) e nn della tabella disposchede, da cui devo solo prelevare la descrizione della famiglia.

  4. #4
    Prova ad aggiungere GROUP BY disposchede.fam

    Oppure ti fai una select sulla tabella Offerte:

    per ogni record che leggi:
    prelevi il campo Offerta_Famiglia
    fai una select sull'altra tabella con WHERE disposchede.Fam= 'CAMPO KE HAI LETTO'
    e del risultato di tale select prendi solo il primo record con mysql_fetch_array



    Ciao.

  5. #5
    Originariamente inviato da gianf_tarantino
    Prova ad aggiungere GROUP BY disposchede.fam

    Oppure ti fai una select sulla tabella Offerte:

    per ogni record che leggi:
    prelevi il campo Offerta_Famiglia
    fai una select sull'altra tabella con WHERE disposchede.Fam= 'CAMPO KE HAI LETTO'
    e del risultato di tale select prendi solo il primo record con mysql_fetch_array
    Ciao.
    Ciao gianf_tarantino
    col group by funziona, a forza di tentativi ero arrivato a quella soluzione, pero' nn mi piace come efficenza, nel senso noto che la query risulta leggermente lenta (ovviamente prendendo tutti i record), e sono sicuro che limitandosi alla sola estrazione del primo record sarebbe molto piu' veloce.

    Mi sembra impossibile che nn ci sia il modo di fare il tutto con una solo query.
    Qualche idea?

  6. #6
    up

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Hai il database strutturato male.
    Dovrebbe esserci una tabella 'famiglie' e dovresti fare la join con quella.

  8. #8
    Originariamente inviato da luca200
    Hai il database strutturato male.
    Dovrebbe esserci una tabella 'famiglie' e dovresti fare la join con quella.
    ciao luca,
    immagino di si, ma purtroppo lavoro su un'unico grosso db, quello fornito da esprinet.
    comunque ho optato per una soluzione diversa, con un campo descrizione nella tabella offerte, prelevo la desc da disposchede e la copio li dentro.

    grazie a tutti dell'aiuto XD

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.