- Home
- Categorie
- Coding e Sistemistica
- PHP
- Come Impostare Tabelle
-
Come Impostare Tabelle
Salve,
vorrei realizzare un ecommerce con i prodotti di un Autoricambi per inserire poco alla volta tutti i ricambi che non si vendono, ma che magari qualcuno da qualche parte sta cercando e non riesce a trovare..!
Il problema principale è che esistono decine di migliaia di motorizzazioni, quindi gestirle non è così semplice se si vuole offrire una buona navigazione al visitatore..
Io avrei pensato di gestirla più o meno così: creare una tabella con la lista delle Marche, Modelli e Motorizzazioni, per poi collegarli tra di loro ed un'altra tabella con i Codici, la Marca, la Descrizione, il Prezzo, etc. di ogni prodotto..Le mie domande sono:
- Come posso associare una motorizzazione, ad esempio un motore 1000 Fire a più di un modello? Tipo alla Fiat Panda, alla Lancia Y10, etc.
- Come posso collegare in modo semplice ogni prodotto a varie motorizzazioni..?
-
Ciao LuigiMdg
rispondendo alle due domande- L'associazione in questione è una N:N (o molti a molti) quindi dovresti creare tre tabelle per gestirla correttamente:
una per le motorizzazioni
una per i modelli
una terza tabella in cui associ le motorizzazioni ai modelli (magari tramite il loro id o la chiave che hai scelto per le tabelle)
2)dipende da come hai pensato il tuo database. Di primo impatto direi che si tratta di una relazione N:N anche in questo caso
- L'associazione in questione è una N:N (o molti a molti) quindi dovresti creare tre tabelle per gestirla correttamente:
-
Ti consiglio una struttura simile a Wordpress che è molto flessibile, se non la conosci te la spiego.
Crei una tabella che contiene info univoche e generiche di ogni prodotto, ad esempio: "Nome prodotto, data inserimento, marca, descrizione, prezzo" ecc...
Poi su un altra tabella crei l'associazione tra **Caratteristica -> ID del prodotto che contiene quella caratteristica.
**Per esempio questa seconda tabella conterrà: **"car_id (id caratteristica, chiave primaria), car_name (nome della caratteristica es. Motorizzazione), car_value (valore della caratteristica, es. Motore 1000 fire), id_prodotto (id del prodotto associato a questa caratteristica)".
**In questo modo non dovrai creare 300 campi per ogni prodotto.
Poi magari ti sbizzarrisci nel backend inserendo delle select per le caratteristiche e non un testo libero.
Su Frontend nella scheda prodotto ti estrai le info del prodotto e la lista delle caratteristiche associate all'id del prodotto.
Che ne pensi?
-
Si, in questi due modi che mi avete illustrato funzionerebbe, il problema è che andrei a sovraccaricare la tabella delle associazioni credo.. Perché ogni prodotto è compatibile con tante motorizzazioni, ci sono prodotti che sono compatibili con centinaia di motori..
Ciò che mi chiedo io è se non si potrebbe inserire in un'unica riga l'associazione tra l'id di un prodotto e tutte le sue associazioni..
Ad es:
id_prodotto
id_motorizzazioniDove nell'id_motorizzazioni io possa inserire tutti gli id compatibili con quel prodotto, magari un campo di tipo var_char, ma non sono sicuro che poi tramite php io possa riuscire a separare gli id e interrogare il database nel giusto modo..
-
In un unica riga ti verrebbe poco comodo.
Le tabelle delle associazioni servono per quello, poi di sicuro dovrai mettere degli indici per ottimizzare le prestazioni!
-
@PietroR said:
In un unica riga ti verrebbe poco comodo.
Le tabelle delle associazioni servono per quello, poi di sicuro dovrai mettere degli indici per ottimizzare le prestazioni!
Ok.. Credo abbiate ragione voi.. Daltronde qui sono io il niubbo..:D
Tral'altro ora che ho scoperto il metodo DISTINCT per il MySQL le cose si stanno semplificando parecchio..:)
-
Attenzione all' utilizzo del Distinct, è un metodo molto pesante, quindi mi raccomando di fare attenzione al suo utilizzo, specialmente se vuoi delle prestazioni elevate, evita il suo utilizzo o utilizza un batch notturno per creare una tabella che contenga i campi giá filtrati dalla Distinct a parte da poter utilizzare tranquillamente durante l` utilizzo dell' applicazione.
-
in alternativa al distinct potresti usare un'accoppiata order by (campo da ordinare) LIMIT 1 (per prendere solo la prima riga).
Se ci metti un esempio vediamo cosa si può fare
-
Non conosco le soluzioni che mi avete proposto, ma mi informerò a riguardo..
In effetti potrei creare un padre by dove controllo se i campi sono uguali ed in tal caso va avanti.. Sarà un po' più laborioso ma dovrei riuscire a ricavarne qualcosa..
Perché in effetti già avevo notato che le pagine sono abbastanza lente nonostante le tabelle di prova contengano 5/6 record..
-
Con 5/6 record dovrebbero essere velocissime di base..
-
@PietroR said:
Con 5/6 record dovrebbero essere velocissime di base..
Infatti mi sembra alquanto strano.. Poi essendo in locale mi preoccupa la cosa.. Immagino che una volta online le comunicazioni saranno ben più lente..PS: Grazie a tutti quanti per l'interessamento, davvero! Non me lo sarei mai aspettato di ricevere cosi tante risposte mirate ed esaurienti, Grazie!
-
Non so se posso chiedere qui dato che si tratta sempre della stessa fase dello stesso progetto..
Ho creato le due tabelle, realizzato le pagine per inserire, modificare e cercare nelle tabelle, quindi è arrivata l'ora X (:D) in cui devo realizzare la pagina per selezionare le Auto da associare a ogni Prodotto..
Io avrei pensato di inserire nella pagina di modifica del Prodotto una lista delle Auto esistenti in archivio, con un checkbox per ogni auto in modo da poterne selezionare più per volta, ma al momento non avrei idea di come impostare i valori delle checkbox per poi poter recuperare tutti i valori ed inserirli nella tabella per associarli ai Prodotti..
Un aiutino..?
-
potresti mettere nel checkbox l'id del record relativo all'automobile
oppure un campo id separato dal check box e se è selezionato vai a leggere il relativo id (forse è meglio questa)
-
@PietroR said:
potresti mettere nel checkbox l'id del record relativo all'automobile
oppure un campo id separato dal check box e se è selezionato vai a leggere il relativo id (forse è meglio questa)
Si, credo di sapere come fare per creare la lista.. L'unico problema è che la lista diventerà decisamente lunga nel breve periodo se non creo dei gruppi (Marca) e dei sottogruppi (Modelli)..
Come spiegavo qui, ma sono ancora in attesa di una risposta..
giorgiotave.it/forum/php-mysql/236144-checkbox-con-gruppi-e-sottogruppi.html