Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    query correlata con più condizioni WHERE

    Ciao a tutti...
    Non riesco a capire come posso fare una serie di multipli WHERE su una query.
    Mi spiego cercando di fare un esempio...

    Ho un database con 3 tabelle: prodotti, luoghi, prodottoID_luogoID.
    Siccome un prodotto può essere in più luoghi ( magazzini ), mi chiedevo come fare la query:

    SELECT p.*
    FROM prodotti p
    LEFT JOIN prodottoID_luogoID pl ON p.id = pl.prodotto_id
    LEFT JOIN luoghi l ON pl.luogo_id = l.id
    WHERE
    l.citta LIKE '%….%' AND
    l.citta LIKE '%….%' AND
    l.citta LIKE '%….%' AND
    ecc…..

    ma deve restituire i prodotti che stanno in tutte le città indicate nella query!

    ma mi sa che non è la strada giusta....
    avete un'idea di come fare?

    grazie infinite!

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Chiaramente, l.citta non puà assumere più valori contemporaneamente (AND)

    Prova così:

    Codice PHP:
    SELECT p.*, count(l.citta) as c
    FROM prodotti p
    LEFT JOIN prodottoID_luogoID pl ON p
    .id pl.prodotto_id
    LEFT JOIN luoghi l ON pl
    .luogo_id l.id
    WHERE
    l
    .citta LIKE '%….%' OR
    l.citta LIKE '%….%' OR
    l.citta LIKE '%….%' OR 
    ...
    GROUP BY p.id
    HAVING c 
    >= $numero_di_luoghi_nella_query 

  3. #3
    Ciao Boots e grazie per l'aiuto.
    Non ho capito bene dove vai a prendere $numero_di_luoghi_nella_query.

    Inoltre lo so che l.citta non può avere più valori contemporaneamente, ma a un prodotto possono essere assegnate diverse città....

    ho a tebella dei prodotti, quella dei luogi e la tabella che mi crea la relazione uno a molti.
    Voglio recuperare i prodotti che appartengono, per esempio, a roma e milano... che query devo fare?

    grazie mille!

  4. #4
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Prova la query che ti ho scritto.
    $numero_di_luoghi_nella_query sono il numero di città su cui cerchi.

    Ad esempio, se cerchi su milano e roma => 2
    milano, roma, napoli, torino => 4
    etc...

  5. #5
    Boots sei un drago!
    Grazie mille funziona!

  6. #6
    ragazzi mi sono ribloccato

    come si possono trovare il numero di record recuperati?
    ho provato a fare COUNT(*), ma mi sa che in questo caso non funziona....

    grazie mille!

  7. #7
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Ma mysql_num_rows (o equivalenti) ?

  8. #8
    si hai perfettamente ragione. Nel mio caso userei $db->affected_rows visto che sto usando la classe mysqli.
    Ma mi chiedevo se a livello di prestazioni richiedere un COUNT era meglio piuttosto che richiedere tutti i row per poi contarli...
    che ne pensi? sono paranoico? eheheh....

  9. #9
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Ma non puoi usare count() visto che c'è group by.
    Per farlo dovresti fare due query:
    Codice PHP:
    // Prendo i dati
    SELECT p.*, count(l.citta) as 
    ...
    HAVING c >= $numero_di_luoghi_nella_query

    // Conto le righe ottenute
    SELECT count(*) FROM
       
    (SELECT p.*, count(l.citta) as 
        
    ...
        
    HAVING c >= $numero_di_luoghi_nella_query
        

    ed a quel punto è meglio affected_rows()..

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.