Domanda

Sto utilizzando PHP e MySQL.Ho una tabella che contiene le colonne id e la quantità.Vorrei recuperare l'id della riga che è l'ultimo per somma di quantità come viene raggiunto il numero di 40 somma.Per essere più specifici.Ho 3 righe nel database.Uno con quantità 10, uno con la quantità di 30 e uno con quantità 20.Quindi, se devo sommare le quantità, il risultato 40, vorrei riassumere i primi due strega significa:10 + 30 = 40.In quel modo, l'ultimo Id che viene utilizzato per somma il numero 40 è 2.Voglio solo sapere l'id dell'ultima riga che viene utilizzato per completare la somma di 40.

Vorrei dare ulteriori dettagli, se richiesto.GRAZIE!!


Mettiamola in questo modo:Io veramente sono 6 prodotti nella mia mano.Il primo è venuto al mio possesso alla data del 10, il prossimo 3 è venuto alla data del 11 e le ultime 2 sono venuto su 12.

Ora, voglio vendere 3 prodotti all'interno del magazzino.E vuoi vendere loro nell'ordine in cui sono venuto.Quindi per il cliente che vuole 3 prodotti che vorrei vendere lui il prodotto che è venuto su 10 e 2 prodotti da quelli che sono venuti su 11.

Per il prossimo cliente che vuole 2 prodotti, vorrei vendere la di lui uno prodotto dalla data di 11 che resti l'ultimo ordine di 3 prodotti, e un altro di quelli su 12.

La domanda è: come faccio a sapere che il prezzo era ogni prodotto che ho venduto ?Ho pensato che se riesco a trovare le righe riassume ogni quantità richiesta, vorrei sapere da dove cominciare la somma ogni volta che voglio consegnare un ordine.Quindi prima vorrei guardare le righe riassume 3 prodotti e mantenere l'id della voce.Per il prossimo ordine vorrei iniziare il conteggio da che ID e la somma fino a che riassume il secondo ordine di 2 prodotti e così via.Ho pensato che in questo modo, posso tenere traccia di in arrivo prezzi di ogni prodotto.Quindi non voglio vendere prodotti dalla data di 12 ad un prezzo costruite con i primi prezzi.

Spero che tu capisca.Ho solo bisogno di sapere che prezzo ha avuto uno qualsiasi dei miei prodotti, quindi mi sa che i primi prodotti hanno un prezzo, ma come il prodotto di prezzi salgono, devo alzare il mio prezzi troppo...Così gli ultimi prodotti, provenienti devono essere venduti per un prezzo più alto.Posso solo ottenere che se non tenere traccia di questo...

Vi ringrazio molto.


Nessuno ?O, ancora più facile:MySQL deve selezionare la necessaria righe per SOMMA(quantity) per essere superiore o uguale a 40, per esempio.E allora per me l'id dell'ultima riga che ha partecipato alla somma del processo.

È stato utile?

Soluzione

Non capisco la tua domanda troppo bene.Puoi provare riformulazione più correttamente?Da quello che ho interpretato, ecco la struttura del database:

ProductID    ArrivalDate
   1          10
   2          11
   3          11
   4          11
   5          12
   6          12

Adesso ti stai chiedendo, "come faccio a sapere che il prezzo era ogni prodotto che ho venduto"?Che quasi mi confonde, poiché ogni valore nel database non ha prezzo attributo.Non dovrebbe il vostro database di simile a questo:

ProductID    ArrivalDate    Price
   1          10              100
   2          11              200
   3          11              300
   4          11              300
   5          12              400
   6          12              400

Personalmente, penso che la tua idea, scoprire il prezzo venduto è viziata.Sarebbe più sensato da aggiungere alcuni campi al database:

ProductID    ArrivalDate    Price     InStock   DateSold
   1          10              100       Yes        17
   2          11              200       Yes        17
   3          11              300       Yes        18
   4          11              300       Yes        18
   5          12              400       no        
   6          12              400       no        

Il cambio del vostro database, si può facilmente tenere traccia di quando un prodotto arriva, la data venduti, il suo prezzo, forse la quantità (non so se è un campo effettivo o non).

Inoltre, è possibile semplificare e rendere la vostra vita più facile, separando le query sql, o anche l'aggiunta di un po 'di codice per fare un po' di lavoro per voi.

Altri suggerimenti

Una terza colonna con un totale di esecuzione.Poi si può semplicemente restituire l'ultima riga in cui il totale di esecuzione <= il valore di destinazione.

Così il vostro tavolo dovrebbe assomigliare a questo:

ID    Quantity    RunningTotal
1           10              10
2           30              40
3           20              60

NOTA:Se si elimina una riga nella tabella, ricordate di aggiornare tutte le righe successive RunningTotal -= DeletedRow.Quantity!

Basandosi sull'ID della tabella, è probabilmente una cattiva idea, ma se è così è davvero fatto bene, si potrebbe provare qualcosa di simile a questo (non testato):

SELECT yourTableA.id
  FROM yourTable AS yourTableA
  JOIN yourTable AS yourTableB
 WHERE ( yourTableA.value + yourTableB.value ) = 40
   AND yourTableA.id != yourTableB.id
 ORDER BY yourTableA.id

Questo tipo di soluzione funziona solo se il vostro aspetta che avete solo bisogno di due righe sempre pari al vostro target di somma.Dal momento che questo è più probabile che non sia il caso, la vostra scommessa migliore è probabilmente quello di cercare di ottenere tutte le righe e fare questo programaticly su dati restituiti.

Il Totale parziale soluzione inviato da lc è anche una buona opzione anche se io di solito per cercare di evitare la memorizzazione di dati calcolati a meno che non devo assolutamente.


Sulla base delle informazioni aggiornate da questa richiesta, ho un'alternativa di risposta.

Non sembra così tanto come si cura l'inventario.Si preoccupano di più quando i prodotti sono venuto in.

SELECT *
  FROM product
 ORDER BY product.receivedData

Processo ogni record in negozio il prezzo per il record, e mantenere per tutto il tempo necessario fino a quando si raggiunge il numero di elementi che è necessario.Si dovrebbe finire con un elenco di elementi, il numero di inventario, a quel livello, e il prezzo a quel livello.

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