Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Discussione: [mysql] subquery?

  1. #1
    Utente di HTML.it L'avatar di eraclito
    Registrato dal
    May 2002
    Messaggi
    1,273

    [mysql] subquery?

    ciao,

    ho una tabella fatta così:

    IDprodotto
    IDcliente

    dove per ogni acquisto inserisco l'id cliente e l'id prodotto acquistato

    vorrei, partendo da due prodotti predefiniti, con una query estrarre tutti i clienti che hanno acquistato entrambi i prodotti.

    mi sapete aiutare?

    eraclito
    L'apprendere molte cose non insegna l'intelligenza
    Voglio avere dubbi più chiari

  2. #2
    Utente di HTML.it L'avatar di eraclito
    Registrato dal
    May 2002
    Messaggi
    1,273

    Re: [mysql] subquery?

    Originariamente inviato da eraclito
    ciao,

    ho una tabella fatta così:

    IDprodotto
    IDcliente

    dove per ogni acquisto inserisco l'id cliente e l'id prodotto acquistato

    vorrei, partendo da due prodotti predefiniti, con una query estrarre tutti i clienti che hanno acquistato entrambi i prodotti.

    mi sapete aiutare?

    eraclito
    L'apprendere molte cose non insegna l'intelligenza
    Voglio avere dubbi più chiari

  3. #3
    Prova:
    codice:
    SELECT * 
    from acquisti a
    left join clienti c
    ON c.IDcliente = a.IDcliente
    where a.IDprodotto = '$id1'
    OR a.IDprodotto = '$id2'

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

  4. #4
    Utente di HTML.it L'avatar di eraclito
    Registrato dal
    May 2002
    Messaggi
    1,273
    Originariamente inviato da piero.mac
    Prova:
    codice:
    SELECT * 
    from acquisti a
    left join clienti c
    ON c.IDcliente = a.IDcliente
    where a.IDprodotto = '$id1'
    OR a.IDprodotto = '$id2'
    ciao, non ho capito bene.

    io ho una sola tabella (acquisti) con due colonne:
    IDprodotto
    IDcliente

    devo coinvolgere anche le tabelle relazionate?
    L'apprendere molte cose non insegna l'intelligenza
    Voglio avere dubbi più chiari

  5. #5
    Originariamente inviato da eraclito
    ciao, non ho capito bene.

    io ho una sola tabella (acquisti) con due colonne:
    IDprodotto
    IDcliente

    devo coinvolgere anche le tabelle relazionate?
    Scusa se credevo fosse complessa la cosa....

    Ma se hai una tabella e devi tirar fuori un risultato devi sbatterti a quel modo????
    codice:
    SELECT *
    FROM TABELLA
    WHERE IDprodotto = '$id1'
    or IDprodotto = '$id2'
    ORDER BY IDprodotto, IDcliente

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

  6. #6
    Utente di HTML.it L'avatar di eraclito
    Registrato dal
    May 2002
    Messaggi
    1,273
    perchè devo estrarre solo gli IDcliente che hanno acquistato entrambi i prodotti

    in questo modo
    codice:
    SELECT *
    FROM TABELLA
    WHERE IDprodotto = '$id1'
    or IDprodotto = '$id2'
    ORDER BY IDprodotto, IDcliente
    estraggo anche quelli che non ne hanno acquistato uno solo, e se li incrocio in and non ne trovo nessuno (nessuna riga ha ovviamente + prodotti)

    L'apprendere molte cose non insegna l'intelligenza
    Voglio avere dubbi più chiari

  7. #7
    Utente di HTML.it L'avatar di eraclito
    Registrato dal
    May 2002
    Messaggi
    1,273
    ho pensato ad una cosa tipo:
    codice:
    SELECT *
    FROM acquisti as a left join acquisti as b on a.IDcliente=b.IDcliente
    WHERE a.IDprodotto  ='1'
    or b.IDprodotto = '2'
    funziona ma è lentissima (e io dovrei cercare + di due prodotti...)
    L'apprendere molte cose non insegna l'intelligenza
    Voglio avere dubbi più chiari

  8. #8
    Originariamente inviato da eraclito
    ho pensato ad una cosa tipo:
    codice:
    SELECT *
    FROM acquisti as a left join acquisti as b on a.IDcliente=b.IDcliente
    WHERE a.IDprodotto  ='1'
    or b.IDprodotto = '2'
    funziona ma è lentissima (e io dovrei cercare + di due prodotti...)
    Perche' sei in una condizione "simile" a quella della relazione molti a molti.

    prova a raggruppare, supponendo che il prodotto da cercare lo conosci ed il risultato che ti serve avere e' solo l'id cliente.
    codice:
    SELECT  * ,
    count(IDcliente) as tot
    FROM acquisti
    WHERE IDprodotto = 1 
    OR IDprodotto = 2
    group by IDcliente
    having tot = 2

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

  9. #9
    Utente di HTML.it L'avatar di eraclito
    Registrato dal
    May 2002
    Messaggi
    1,273
    intanto grazie per la pazienza,

    ho provato la query che effettivamente è molto veloce.

    ancora però ho dei problemi:
    un cliente può comprare + volte lo stesso prodotto, in questo caso viene inserito nel risultato anche se ha comprato un solo prodotto (però due volte...)
    L'apprendere molte cose non insegna l'intelligenza
    Voglio avere dubbi più chiari

  10. #10
    Originariamente inviato da eraclito
    intanto grazie per la pazienza,

    ho provato la query che effettivamente è molto veloce.

    ancora però ho dei problemi:
    un cliente può comprare + volte lo stesso prodotto, in questo caso viene inserito nel risultato anche se ha comprato un solo prodotto (però due volte...)
    Mi sa che eccezioni per eccezioni alla fine devi fare una tabella temporanea...
    codice:
    create temporary table temp
    select * from acquisti
    WHERE IDprodotto = 1 
    OR IDprodotto = 2
    group by IDcliente, IDprodotto;
    
    SELECT  * ,
    count(IDcliente) as tot
    FROM temp
    group by IDcliente
    having tot = 2
    prova tenendo presente che non l'ho verificata....

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

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.