Domanda

Prima di tutto, mi scuso per la lunghezza. Questo è un po 'complicato (almeno per me).

Sfondo nel database:

Ho una tabella di prodotti, variabili e prezzi. I "prodotti" sono le informazioni principali relative a un prodotto (descrizione, titolo, ecc.). I "prezzi" hanno informazioni su ciascun prezzo (prezzo, costo, Qtà minima richiesta, costo di spedizione, ecc.), Poiché alcuni prodotti possono avere più di un prezzo (un widget da 10 "è un prezzo diverso rispetto a un widget da 12", ad esempio) . Le "variabili" sono variazioni al prodotto che non cambiano il prezzo, come colore, dimensioni, ecc.

Inizialmente (quando ho creato questo database circa 7 anni fa) ho avuto le informazioni variabili memorizzate al primo prezzo in un elenco di prezzi per lo stesso prodotto in un formato delimitato da pipa (sì, lo so, badbadbad). Questo ha funzionato in generale, ma abbiamo sempre avuto un problema, tuttavia, in cui a volte una variabile non sarebbe coerente tra tutti i prezzi.

Ad esempio, un widget (prodotto) può essere di 10 "o 12" e vendere rispettivamente per $ 10 e $ 20 (prezzi). Tuttavia, mentre il widget da 10 "può essere disponibile in blu e rosso (variabili), il widget da 12" è disponibile solo in rosso. Abbiamo migliorato questo problema aggiungendo una piccola dichiarazione tra parentesi nella variabile incongruente come "solo rosso (10") ". Questo tipo di funziona, ma i clienti non sono sempre così intelligenti e molto tempo è dedicato alla correzione di errori quando un cliente seleziona Un widget da 12 "in rosso.

Da allora mi è stato incaricato di modernizzare il database e ho deciso di mettere le variabili nel proprio tavolo e renderle più dinamiche e più facili da abbinare a determinati prezzi, oltre a mantenere un inventario più a prova di fittizio (non puoi immaginare il incubi).

Il mio primo passo è stato quello di scrivere una procedura memorizzata sul mio test DB (per quando faccio la conversione) per elaborare tutte le variabili esistenti in una nuova tabella variabile (e la tabella delle etichette, ma non è davvero importante, non credo). Ho effettivamente analizzato le variabili e le ho elencate con l'ID prodotto corretto e l'ID prodotto a cui erano inizialmente associati nella tabella variabile. Tuttavia, mi sono reso conto che questa è solo una parte del problema, poiché io (almeno per la trasformazione iniziale del database) voglio che ciascuna variabile sia elencata come collegata a ciascun prezzo per un determinato prodotto.

Per fare questo, ho creato un altro tavolo, così:

tblvariablesprices
variablepriceid | variableid | priceid | productid

che è un molti a molti con la tabella variabile.

I problemi:

Il mio problema ora è che non so come creare le righe. Posso creare un join sinistra sui miei prezzi e le tabelle delle variabili per ottenere (credo) tutti i dati necessari, non so come attraversarli. Il mio SQL è (MySQL 5.0):

SELECT p.priceid, p.productid, variableid, labelid 
FROM tblprices p 
LEFT JOIN tblvariables v ON p.priceid = v.priceid 
ORDER BY productid, priceid

Questo mi porterà ogni proporzione e productID e tutti gli ID variabili ed etichette corrispondenti. Questo è buono in alcuni casi, come quando ho qualcosa del tipo:

priceid | productid | variableid | labelid
2       | 7         | 10         | 4
2       | 7         | 11         | 4
2       | 7         | 12         | 4
3       | 7         | (null)     | (null) --- another price for product

Perché ora so che ho bisogno di creare un record per PriceId 2 e variabiliids 10, 11, 12 e poi anche per PriceId 3 per quel prodotto. Tuttavia, ottengo anche risultati da questo set di dati per prodotti senza variabili, prodotti con un prezzo e più variabili e prodotti con più prezzi e variabili, ad esempio:

priceid | productid | variableid | labelid
2       | 7         | 10         | 4
2       | 7         | 11         | 4
2       | 7         | 12         | 4
3       | 7         | (null)     | (null)
4       | 8         | (null)     | (null) --- 1 price no variables
5       | 9         | 13         | 5      --- mult vars, 1 price
5       | 9         | 14         | 5
5       | 9         | 15         | 6
5       | 9         | 16         | 6
6       | 10        | (null)     | (null) --- mult price, no vars
7       | 10        | (null)     | (null)
8       | 10        | (null)     | (null)

Prendendo il set di dati di cui sopra, voglio aggiungere voci nella mia tabella TBLPRIESVARIABLE in questo modo:

variablepriceid | variableid | priceid | productid
1               | 10         | 2       | 7
2               | 11         | 2       | 7
3               | 12         | 2       | 7
4               | 10         | 3       | 7
5               | 11         | 3       | 7
6               | 12         | 3       | 7
7               | 13         | 5       | 9
8               | 14         | 5       | 9
9               | 15         | 5       | 9
10              | 16         | 5       | 9

Ho migliaia di record da elaborare, quindi ovviamente farlo manualmente non è la risposta. Qualcuno può almeno indicarmi nella direzione corretta, se non viene inventato uno sproc che potrebbe gestire questo tipo di operazione? Vorrei anche accogliere qualsiasi commento su come organizzare e/o strutturare meglio questi dati.

Grazie mille per aver letto tutto questo e aiutarmi.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top