[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
105
0
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


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
105
0
0
Milano
www.holidaysoft.it

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
105
0
0
Milano
www.holidaysoft.it
SELECT * FROM PRODOTTI A, PRODOTTI_CORR_MENU B, PRODOTTI_TIPO C
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')


image.php

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
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
105
0
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
 
Discussioni simili
Autore Titolo Forum Risposte Data
L Mysql: Nascondere le pagine dopo una ricerca PHP 1
L Ricerca valore mysql e incremento PHP 73
A [MySQL] Ricerca in PMA MySQL 0
Emix [PHP][MYSQL] Ricerca avanzata tramite form PHP 6
R [MySQL] ricerca per data... MySQL 10
gandalf1959 Estrazione di un singolo dato da una ricerca mysql PHP 1
MarcoGrazia [PDO][PHP[MySQL] Piccolo modulo di ricerca in un sito tramite l'operatore LIKE Snippet PHP 1
R Barra ricerca php e mysql PHP 0
R Ricerca Email in database mysql con php PHP 2
W Form di ricerca all'interno di un sito mysql PHP 1
G Visualizzazion modulo di ricerca in PHP e MySql PHP 0
P Form per ricerca multipla in MYsql PHP 2
F Ricerca avanzata PHP & MySQL PHP 4
W [Php - MySql] ricerca con form select diversi PHP 14
E ricerca dati nel DB mysql. PHP 16
M Errore in query mysql su ricerca record PHP 3
K form Inserimento record mysql PHP 2
P Mysql lento a cancellare MySQL 1
P Codifica caratteri speciali mysql php PHP 0
N MAX() + ADD_DATE - per update su Mysql MySQL 0
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
W MySQL ciclo in SELECT MySQL 0
L Mysql gestionale multipiattaforma MySQL 0
W MySQL SELECT list dinamica MySQL 0
M utilizzo mysql in nodejs - crea createdAt e updateAt MySQL 1
T colonne di tabelle mysql ordinate MySQL 0
M Sintassi "personalizzata" per mysql workbench? MySQL 0
A Mysql MySQL 0
F Ricreare struttura php+mysql su Xampp Apache 0
M Array associativi php su 2 campi mysql PHP 10
Z Controllo giorni MYSQL PHP 0
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
S problema con recupero dati tabella mysql PHP 2
E Progressbar estrazione dati da tabella mySQL Ajax 9
Z MySql injection PHP PHP 1
D controllare valore in tabella mysql PHP 0
A pulsante di update campo mysql con javascript Javascript 2
R Tutto su utf-8 ma ancora problemi con i caratteri speciali in mysql MySQL 1
T differenza fra mysql xampp e un mysql server Database 0
R Importazione csv su mysql tramite array PHP 2
Z Problema con INT MySQL PHP 1
Z Problema database MySQL con XAMPP PHP 0
D problema php mysql PHP 1
D problema php mysql PHP 1
N Server mysql non raggiungibile da connessione esterna MySQL 1
B Crea pdf da tabella mysql "ultima riga modificata" MySQL 4

Discussioni simili