- Home
- Categorie
- Coding e Sistemistica
- PHP
- Query medio-complessa per E-commerce
-
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 Joinordine_dettaglio_varianti
ONordine_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?
-
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:)
-
No non funziona per i miei scopi.
Ora la semplificoTabella ordini
id idArticolo idVariante
1 1 1
2 1 2
3 2 1
4 2 2
5 2 3
6 3 1Mi 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
-
@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