• User

    Query medio-complessa per E-commerce

    Ho bisogno di una query che mi dica se esiste oppure no, un ordine con un articolo che soddisfa due condizioni (due versioni diverse colore e taglia)

    SELECT
    ordini_dettaglio.quantita,
    ordini_dettaglio.id_ordine,
    ordini_dettaglio.id_prodotto
    FROM
    ordini_dettaglio
    Left Join ordine_dettaglio_varianti ON ordine_dettaglio_varianti.idOrdineDettaglio = ordini_dettaglio.id
    WHERE
    ordine_dettaglio_varianti.idVarianteOpzione = '1'
    AND
    ordine_dettaglio_varianti.idVarianteOpzione = '6'

    Ovviamente scritta cosi' non funziona...

    Dovrei fare due query con
    WHERE
    ordine_dettaglio_varianti.idVarianteOpzione = '1'
    e se trovo un record fare un altra query con
    WHERE
    ordine_dettaglio_varianti.idVarianteOpzione = '6'
    Esiste la maniera di fare un unica query?


  • Bannato User Attivo

    non è facile senza il db davanti, ci provo, fai la tua stessa query con le condizioni in OR invece che AND, a questo punto per lo stesso id_prodotto hai due record per chi ha 1 e 6, o un record se non c'è variante. Per capire quale ordine ha le due varianti fai una GROUP BY per i 3 campi della SELECT è prendi quelli con coun(*) = 2.

     SELECT
    `ordini_dettaglio`.`quantita`,
    `ordini_dettaglio`.`id_ordine`,
    `ordini_dettaglio`.`id_prodotto`
    FROM
    `ordini_dettaglio`
    Left Join `ordine_dettaglio_varianti` ON `ordine_dettaglio_varianti`.`idOrdineDettaglio` = `ordini_dettaglio`.`id`
    WHERE
    `ordine_dettaglio_varianti`.`idVarianteOpzione` =  '1'
    **OR**
    `ordine_dettaglio_varianti`.`idVarianteOpzione` =  '6'
    **GROUP BY **** `ordini_dettaglio`.`quantita`,
     `ordini_dettaglio`.`id_ordine`,
     `ordini_dettaglio`.`id_prodotto`**
    ** HAVING COUNT(*) = 2**
    
    ```non ti assicuro il risultato, sono andato a mente:)

  • User

    No non funziona per i miei scopi.
    Ora la semplifico

    Tabella ordini
    id idArticolo idVariante
    1 1 1
    2 1 2
    3 2 1
    4 2 2
    5 2 3
    6 3 1

    Mi serve una select unica che mi trovi un determinato articolo con determinate varianti
    es. Mi serve l'idArticolo di un prodotto che abbia variante 1 e 2 (cioè solo idArticolo 1)

    oppure che abbia variante 1 (perciò solo idArticolo 3)

    Ciao e grazie
    Brucee


  • User

    @saro78 said:

    non è facile senza il db davanti, ci provo, fai la tua stessa query con le condizioni in OR invece che AND, a questo punto per lo stesso id_prodotto hai due record per chi ha 1 e 6, o un record se non c'è variante. Per capire quale ordine ha le due varianti fai una GROUP BY per i 3 campi della SELECT è prendi quelli con coun(*) = 2.

    > SELECT
    `ordini_dettaglio`.`quantita`,
    `ordini_dettaglio`.`id_ordine`,
    `ordini_dettaglio`.`id_prodotto`
    FROM
    `ordini_dettaglio`
    Left Join `ordine_dettaglio_varianti` ON `ordine_dettaglio_varianti`.`idOrdineDettaglio` = `ordini_dettaglio`.`id`
    WHERE
    `ordine_dettaglio_varianti`.`idVarianteOpzione` =  '1'
    **OR**
    `ordine_dettaglio_varianti`.`idVarianteOpzione` =  '6'
    **GROUP BY **** `ordini_dettaglio`.`quantita`,
     `ordini_dettaglio`.`id_ordine`,
     `ordini_dettaglio`.`id_prodotto`**
    ** HAVING COUNT(*) = 2**
    
    >```non ti assicuro il risultato, sono andato a mente:)
    
    Ho provato ad adottare la tua tecnica...
    Ma se nello stesso "ordine" uno compra una maglietta taglia S Rossa e un altra maglietta taglia S Gialla, la tua query non è in grado di capire l'id_dettaglio_ordine giusto perchè tutte e due le query soddisfano la condizione.
    
    Cioè
     WHERE
    `ordine_dettaglio_varianti`.`idVarianteOpzione` =  '1'
    **OR**
    `ordine_dettaglio_varianti`.`idVarianteOpzione` =  '6'
    
    è uguale a 
     WHERE
    `ordine_dettaglio_varianti`.`idVarianteOpzione` =  '1'
    **OR**
    `ordine_dettaglio_varianti`.`idVarianteOpzione` =  '7
    
    Perchè quell'OR fa si che almeno una delle due condizioni sia soddisfatta