[MySQL] Ricerca in due tabelle

james81

Utente Attivo
14 Set 2010
72
0
0
Ciao a tutti!
volevo chedervi un consiglio:
ho una tabella prodotti e una tabella caratteristice, le due tabelle sono correlate da una terza tabella correlazione dove inserisco l' ID_prodotto e ID_caratteristice.

Ora, da un form passo due variabili, una che vado a ricercare all'interno della tabella prodotti, e una (opzionale) che vado a ricercare dentro la tabella correlazione.

Non riesco a capire come impostare la mia query per questo tipo di ricerca.

Qualche aiuto?
 

james81

Utente Attivo
14 Set 2010
72
0
0
ho impostato la mia query

SELECT * FROM prodotti , correlazione WHERE .... AND correlazione.prodotto_id = prodotti.prodotto_id.......

e mi restituisce i prodotti che hanno una correlazione, però io vorrei invece che mi estrapolasse solo i prodotti che hanno una determinata correlazione (una variabile che passo dal form)

Es. dal mio form ricerca una MAGLIA(campo imput) ROSSA (scelta multipla)

ora vorrei ricercare tutte le MAGLIE ROSSA , logicamente il campo ROSSA la trovo come correlazione nella tabella correlazione dove ho l'ID del prodotto (MAGLIA) e l'iID del colore
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, così al volo senza ragionare potresti provare questa
Codice:
SELECT * FROM prodotti P
JOIN correlazione  C USING (idProdotto)
JOIN caratteristiche CP USING (idcaratteristica)
WHERE CP.colore = "rosso"
 

james81

Utente Attivo
14 Set 2010
72
0
0
nel fine settimana avevo trovato questa soluzione:


$query = "SELECT * FROM j30_prodotti WHERE

( campo1 LIKE '%".$valore."%' OR campo2 LIKE '%".$valore."%' OR campo3 LIKE '%".$valore."%' OR campo4 LIKE '%".$valore."%' )

AND tabella_correlazione.prodotto_id = prodotti.prodotto_id AND j30_tabella_correlazione.id_colore = $rosso AND j30_tabella_correlazione.id_colore = $giallo

AND published = 1 ".$betw." ORDER BY prodotto_nome ASC ";

ora il tutto funziona fino a che non ricerco tutti i prodotti con che possono essere di colore giallo o anche rosso.
Ciaè se cerco un colore alla volta la query funziona perfettamente , se ne cerco più di uno la query non funziona più
ho evidenziato di nero la parte di filtraggio in base alla correlazione
 
Ultima modifica:

HolidaySoft.it

Utente Attivo
16 Ott 2012
106
1
0
Milano
www.holidaysoft.it
Ciao,
ipotizzando queste tre tabelle:

Codice:
PRODOTTI	
ID_PRODOTTO	DESC_PRODOTTO
1	MAGLIA
2	SCIARPA
	
CORRELAZIONE		
ID_CORRELAZIONE	ID_PRODOTTO	ID_CARATTERISTICHE
1	1	1
2	1	2
3	2	1
4	2	3
	
CARATTERISTICHE	
ID_CARATTERISTICHE	DESC_CARATTERISTICHE
1	ROSSA
2	BIANCA
3	NERA
la select da utilizzare per estrarre l'id_correlazione di una MAGLIA ROSSA è:

Codice:
SELECT * FROM PRODOTTI A, CORRELAZIONE B, CARATTERISTICHE C
WHERE A.ID_PRODOTTO=B.ID_PRODOTTO AND B.ID_CARATTERISTICHE=C.ID_CARATTERISTICHE
AND A.DESC_PRODOTTO='MAGLIA'
AND C.CARATTERISTICHE_DESC='ROSSA'
Ciao
Michele

[HR][/HR]
A quick solution is a shortcut to troubleshooting
HolidaySoft.it - Gestionali, Database, SitiWeb
GarganoSapori.it - Olio ExtraVergine del Gargano
OsteriaORistorante.it - Crea la Vetrina per il tuo Ristorante!
 

james81

Utente Attivo
14 Set 2010
72
0
0
lo schema che hai rappresentato è praticamente uguale a quello del mio DB.
Ho provato ad applicare la tua soluzione ma non mi restituisce nessun record. Ho provato allora a "sfoltirla" levando qualche AND ma il problema persisite, anzi mi ritrovo addirittura in alcuni casi la lista completa di tutti i prodotti, e ho notato questo se aggiungo le altre due tabelle CORRELAZIONE B, CARATTERISTICHE C
 

james81

Utente Attivo
14 Set 2010
72
0
0
PRODOTTI
prodotto_id
nome_prodotto

PRODOTTI_TIPO
id_tipo
nome

PRODOTTI _CORR_MENU
id_tipo
prodotto_id
id_tipo
 

james81

Utente Attivo
14 Set 2010
72
0
0
PRODOTTI
prodotto_id nome_prodotto
1 maglia
2 pantalone
3 calzini
4 giacca

PRODOTTI_TIPO
id_tipo nome
1 rossa
2 blu
3 giallo
4 verde

PRODOTTI _CORR_MENU
id_tipo prodotto_id id_tipo
1 1 1
1 2 1
1 3 1
1 1 2
1 1 3
1 1 4
1 2 2
1 4 4
1 3 4
 

HolidaySoft.it

Utente Attivo
16 Ott 2012
106
1
0
Milano
www.holidaysoft.it
Nel tuo esempio trovo anomala la terza tabella:
- il primo e terzo campo hanno lo stesso nome
- uno dei due campi sarà l'id della tabella PRODOTTI _CORR_MENU e quindi non ci possono essere duplicati
Prova a ri-postare l'esempio con la terza tabella priva di anomalie

Ciao
Michele

[HR][/HR]
A quick solution is a shortcut to troubleshooting
HolidaySoft.it - Gestionali, Database, SitiWeb
GarganoSapori.it - Olio ExtraVergine del Gargano
OsteriaORistorante.it - Crea la Vetrina per il tuo Ristorante!
 

james81

Utente Attivo
14 Set 2010
72
0
0
so scusa, nel cercare di impaginare i dati ho copiato i nomi in maniera errata e ho ripetuto due volte lo stesso nome ecco qui quella corretta:

PRODOTTI _CORR_MENU
(id) (prodotto_id) (id_tipo)
1 1 1
1 2 1
1 3 1
1 1 2
1 1 3
1 1 4
1 2 2
1 4 4
1 3 4
 

james81

Utente Attivo
14 Set 2010
72
0
0
perfetto....lo stò provando e sembra funzionare! :)

volevo chiederti una cosa e se volessi cercare tutte le maglie rosse e gialle e verdi, cioè con più colori ?
 

HolidaySoft.it

Utente Attivo
16 Ott 2012
106
1
0
Milano
www.holidaysoft.it

james81

Utente Attivo
14 Set 2010
72
0
0
ottimo!!...avevo trovato un'altra soluzione ma era molto più complicata della tua !
inoltre ho anche aggiunto un filtro per il prezzo (prezzo_base BETWEEN .....)
data la tua esperienza volevo chiederti un consiglio pratico/esecutivo.
Nei sultati della mia query,posso trovare dei prodotti che hanno il prezzo e altri no, ora vorrei visualizzare prima i prodotti che hanno il prezzo e poi quelli che non ce l'hanno.

in questo coso cosa mi conviene fare? eseguire due query differenze e visualizzarle una sotto l'altra? o ragruppare i risultati?

cosa consigli?
 

HolidaySoft.it

Utente Attivo
16 Ott 2012
106
1
0
Milano
www.holidaysoft.it

james81

Utente Attivo
14 Set 2010
72
0
0
Mik, intanto volevo ringraziarti per la tua disponibilità, inoltre volevo chiderti un'informazione:
alla query volevo aggiungere un'altro filtro (categorie) che ha le stesse indentiche caratteristiche di quello che abbimo visto prima

and nome_prodotto='maglia' and c.nome='rossa' and categorie in ('1','2','3' )

ho aggiunto alla query precedente le voci utilizzando lo schema da te illustratomi ma non funziona:

ELECT * FROM PRODOTTI A, PRODOTTI_CORR_MENU B, PRODOTTI_TIPO C,
PRODOTTI_CORR_CATEGORIE D, PRODOTTI_CATEGORIE E
WHERE A.prodotto_id=B.prodotto_id AND B.id_tipo=C.id_tipo
and nome_prodotto='maglia' and c.nome in ('rossa','giallo','verde')
AND A.prodotto_id=D.prodotto_id AND D.id_categoria=E.id_categoria