• Bannato User Attivo

    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:

    1. Come posso associare una motorizzazione, ad esempio un motore 1000 Fire a più di un modello? Tipo alla Fiat Panda, alla Lancia Y10, etc.
    2. Come posso collegare in modo semplice ogni prodotto a varie motorizzazioni..?


  • User Attivo

    Ciao LuigiMdg
    rispondendo alle due domande

    1. 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


  • Moderatore

    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?


  • Bannato User Attivo

    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_motorizzazioni

    Dove 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..


  • User Attivo

    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!


  • Bannato User Attivo

    @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..:)


  • User

    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.


  • User Attivo

    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


  • Bannato User Attivo

    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..


  • User Attivo

    Con 5/6 record dovrebbero essere velocissime di base..


  • Bannato User Attivo

    @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! :030: 😄


  • Bannato User Attivo

    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..? 🙂


  • User Attivo

    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)


  • Bannato User Attivo

    @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



Sembra che la tua connessione a Connect.gt sia stata persa, per favore attendi mentre proviamo a riconnetterti.