tabelle caratteristiche e prodotti

teo12

Nuovo Utente
15 Dic 2011
7
0
0
Ciao,
vi spiego subito il mio problema ,
ho una tabella prodotti dove sono elencati tutti i vari prodotti con le informazioni sul prezzo, nome , ecc.
nella tabella sono presenti prodotti di diverso tipo ad esempio cpu , hard disk , banchi ram ... e presentano caratteristiche diverse.
Quando navigo nelle varie sezioni del sito ci sono delle opzioni che servono per filtrare le ricerche ...ad esempio, se voglio visualizzare solo le cpu che hanno 2 core o per gli hard disk quelli esterni o interni...
ed ecco il problema ...come posso impostare la tabella che tiene conto delle caratteristiche dei prodotti??

Se fossero tutte cpu potrei impostare un tot di campi in più con le informazioni che mi servono per filtrare i prodotti , come in questo modo

nome cpu - marca - numero core...

ma essendo diverse tipologie di prodotto con diverse caratteristiche non è possibile fare questo , quindi pensavo di fare delle tabelle divise per categoria con le caratteristiche di ogni prodotto, volevo però sapere se questa è un' opzione valida e se esistono soluzioni migliori.
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Allora io farei così. Crei due tabelle, una che contiene i campi che si possono inserire in tutte le categorie (campi_categorie) e una che contiene i campi di ogni singolo prodotto (campi_prodotti), con una struttura simile a questa:
Codice:
CREATE TABLE `campi_categorie` (
  `id_campo` int(11) NOT NULL AUTO_INCREMENT,
  `id_categoria` int(11) NOT NULL,
  `nome_campo` varchar(255) NOT NULL,
  PRIMARY KEY (`id_campo`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE `campi_prodotti` (
  `id_campo` int(11) NOT NULL AUTO_INCREMENT,
  `id_prodotto` int(11) NOT NULL,
  `valore_campo` text NOT NULL,
  PRIMARY KEY (`id_campo`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Nell'area di amministrazione di una categoria avrai la possibilità di associarle uno o più campi (che saranno inseriti nella tabella campi_categorie) e, quando inserirai un nuovo prodotto, dovrai compilarli (e li inserirai nella tabella campi_prodotti). Ricordati di cancellare tutti i campi associati ad una categoria quando la cancelli.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
ma essendo un prodotto appartenente ad una categoria a meno che non sbagli non dovresti fare così?

CREATE TABLE `campi_prodotti` (
`id_campo` int(11) NOT NULL AUTO_INCREMENT,
`id_categoria` int(11) NOT NULL,
`valore_campo` text NOT NULL,
PRIMARY KEY (`id_campo`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 

teo12

Nuovo Utente
15 Dic 2011
7
0
0
grazie , per le risposte ...
comunque avevo già provato a fare in questo modo ma avevo riscontrato un problema...
le categorie possono avere più opzioni di filtraggio , faccio un esempio
nella categoria cpu posso filtrare le cpu per il numero di core ...ma anche per marca...quindi usando la struttura che mi avete suggerito per ogni cpu devo inserire 2 record nella tabella campi_prodotti, uno che mi identifica il numero di core e uno la cpu .... quando vado a filtrare per un solo campo non ci sono problemi perchè ottengo i prodotti che hanno quella marca o quel numero di core , ma se specifico sia la marca che il numero di core non posso fare il filtraggio utilizzando la clausola 'AND' perchè i valori sono in record diversi e quindi non mi trova nessun dato.
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
@borgo: no, perché la tabella che contiene i prodotti è un'altra. Il campo si riferisce al prodotto, e il prodotto alla categoria.

@teo12: puoi risolvere la cosa con una query di questo tipo:
Codice:
SELECT * FROM prodotti p WHERE (SELECT valore_campo FROM campi_prodotti WHERE id_campo = campo_core AND id_prodotto = p.id) = valore_core AND (SELECT valore_campo FROM campi_prodotti WHERE id_campo = campo_marca AND id_prodotto = p.id) = valore_marca
Devi modificare gli ID dei campi e i relativi valori.

È un po' macchinoso, ma, a parte filtrare manualmente i record usando PHP (che porterebbe ad un grande calo delle performance), non ci sono altre soluzioni eleganti.
 
Ultima modifica:

teo12

Nuovo Utente
15 Dic 2011
7
0
0
@borgo: no, perché la tabella che contiene i prodotti è un'altra. Il campo si riferisce al prodotto, e il prodotto alla categoria.

@teo12: puoi risolvere la cosa con una query di questo tipo:
Codice:
SELECT * FROM prodotti WHERE (SELECT valore_campo FROM campi_prodotti WHERE id_campo = 1) = valore1 AND (SELECT valore_campo FROM campi_prodotti WHERE id_campo = 2) = valore2
Devi modificare gli ID dei campi e i relativi valori.

non ho capito il procedimento di questa query...
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Per forza, l'avevo sbagliata! :D
Ho aggiunto una condizione al WHERE.

In pratica seleziona tutte le CPU il cui campo "numero di core" sia uguale a quello dato, così come il campo "marca". Ovviamente devi sempre sostituire gli ID con quelli dei campi e i valori con quelli specificati dall'utente.
 

teo12

Nuovo Utente
15 Dic 2011
7
0
0
Per forza, l'avevo sbagliata! :D
Ho aggiunto una condizione al WHERE.

In pratica seleziona tutte le CPU il cui campo "numero di core" sia uguale a quello dato, così come il campo "marca". Ovviamente devi sempre sostituire gli ID con quelli dei campi e i valori con quelli specificati dall'utente.

non ho ancora capito...puoi essere più chiaro
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
In pseudocodice significa:
Codice:
Seleziona tutti i record dalla tabella prodotti dove:

    il valore della seguente espressione:
        Seleziona il valore del campo 'valore_campo' del record dalla tabella campi_prodotti dove il campo 'id_campo' è uguale al valore 'campo_core' e il campo 'id_prodotto' è uguale al campo 'id' selezionato dalla tabella prodotti
    è uguale al valore 'valore_core'

    e il valore della seguente espressione:
        Seleziona il valore del campo 'valore_campo' del record dalla tabella campi_prodotti dove il campo 'id_campo' è uguale al valore 'campo_marca' e il campo 'id_prodotto' è uguale al campo 'id' selezionato dalla tabella prodotti
    è uguale al valore 'valore_marca'
Fa quello che hai chiesto... Prova ad adattarla.
 

teo12

Nuovo Utente
15 Dic 2011
7
0
0
In pseudocodice significa:
Codice:
Seleziona tutti i record dalla tabella prodotti dove:

    il valore della seguente espressione:
        Seleziona il valore del campo 'valore_campo' del record dalla tabella campi_prodotti dove il campo 'id_campo' è uguale al valore 'campo_core' e il campo 'id_prodotto' è uguale al campo 'id' selezionato dalla tabella prodotti
    è uguale al valore 'valore_core'

    e il valore della seguente espressione:
        Seleziona il valore del campo 'valore_campo' del record dalla tabella campi_prodotti dove il campo 'id_campo' è uguale al valore 'campo_marca' e il campo 'id_prodotto' è uguale al campo 'id' selezionato dalla tabella prodotti
    è uguale al valore 'valore_marca'
Fa quello che hai chiesto... Prova ad adattarla.


ho provato cosi ma non funziona ... forse sbaglio io qualcosa

Codice:
SELECT *
FROM prodotti
WHERE (

SELECT valore_campo
FROM prodotti AS p,  campi_prodotti AS cp
WHERE cp.id_campo =1 // campo num core
AND p.id_prodotto = cp.id_prodotto

) = 'valore1'
AND (

SELECT valore_campo
FROM prodotti AS p,  campi_prodotti AS cp
WHERE cp.id_campo =2 // campo marca
AND p.id_prodotto = cp.id_prodotto

) = 'valore2'
 

teo12

Nuovo Utente
15 Dic 2011
7
0
0
non mi torna ....comunque le subquery non accettano risultati con più record quindi questa query non può funzionare.
 
Discussioni simili
Autore Titolo Forum Risposte Data
max75 query su due tabelle e dati doppioni MS Access 2
S Consiglio si relazione tabelle MS Access 1
E Info relazione tabelle MySQL 17
E Query differenza tra tabelle MySQL 5
F Somma di più tabelle da script Javascript 0
T come ordinare dei record recuperati da due tabelle MySQL 0
K Estrazione di più risultati da tabelle correlate PHP 5
A Visualizzazione due tabelle PHP 1
T colonne di tabelle mysql ordinate MySQL 0
T Query su due tabelle con totali Database 4
L Import massivo di immagini in tabelle piattaforma IONIC Presentati al Forum 1
R Join articolato su 3 tabelle MySQL 5
M Join 3 tabelle PHP 0
M Aggiornare stesso campo in due tabelle PHP 0
M Problemi con query a più tabelle PHP 3
L estrarre valori max tra più tabelle MySQL 2
M Problema su query JOIN in tre tabelle PHP 0
MarcoGrazia Dati nulli su join tra più tabelle MySQL 1
S Problema esportazione tabelle Mysql in Excel PHP 0
M Problema su update di 3 tabelle PHP 1
M Aggiornare simultaneamente i campi di due tabelle collegate con id PHP 4
Tommy03 Unire dati da due tabelle MySQL 5
Tommy03 Unione query di 4 tabelle MySQL 1
G eseguire calcoli matematici su risultati 2 tabelle mysql PHP 4
G Problema caricamento tabelle MySql da PhP PHP 0
R Relazione tra tabelle MS Access 5
Tommy03 Query tra 3 tabelle MySQL 2
G Controllare valori in 2 tabelle PHP 5
L update tabelle in php mysql [risolto] PHP 6
K Unire più tabelle in una singola tabella PHP 3
M Esportare tabelle mdb con relazioni in mysql MS Access 0
elpirata [MySQL] Sincronizzare dati tra due tabelle sullo stesso host MySQL 0
M [HTML] Tool per tabelle complesse responsive HTML e CSS 0
Spenalzo Creare tabelle multiple con Access via VBA MS Access 2
P [PHP] Inserti su più tabelle PHP 3
L [PHP] CMS con DB/tabelle perdsonale PHP 0
felino [Wordpress] Tabelle appartenenti a plugin rimossi WordPress 0
T mysql tutorial per importare tabelle access in mysql aiuto MySQL 2
P [PHP] Stampare record di diverse tabelle ma con nomi uguali PHP 6
S [PHP] come esportare due tabelle in file excel su due fogli distinti PHP 8
G [PHP] backup manuale(o automatico) tabelle msql PHP 6
A [Javascript] Multi input su due tabelle correlate Javascript 1
D [MySQL] Tabelle "molti a molti", SELECT con troppe QUERY MySQL 7
K [PHP] Collegamento tra più tabelle PHP 10
K [MS Access] query da tabelle relazionate MS Access 4
S [PHP] Inner join su 4 tabelle PHP 6
I database mysql estrarre due tabelle Database 2
D [ASP] Motore di ricerca interno su 2 tabelle Classic ASP 3
A [PHP] Creazione tabelle dinamiche PHP 16
bubino8 [PHP] Select multipla su piu tabelle PHP 3

Discussioni simili