Question

J'utilise MySQL et PHP. J'ai une table qui contient les colonnes id et quantité. Je voudrais récupérer l'id de la ligne qui est la dernière à additionner la quantité car elle atteint le nombre 40 au total. Pour être plus précis. J'ai 3 lignes dans la base de données. Une avec la quantité 10, une avec la quantité 30 et une avec la quantité 20. Donc, si je résume les quantités pour obtenir le résultat 40, je résumerai les deux premières, ce qui signifie: 10 + 30 = 40. De cette façon, le dernier Id qui est utilisé pour résumer le nombre 40 est 2. Je veux juste savoir l'id de la dernière ligne qui est utilisé pour compléter la somme de 40.

Je donnerais plus de détails si demandé. MERCI !!

Permettez-moi de le formuler comme suit: J'ai vraiment 6 produits dans ma main. Le premier est venu à ma possession à la date du 10, les 3 suivants à la date du 11 et les 2 derniers au 12.

Maintenant, je veux vendre 3 produits de mon stock. Et veulent les vendre dans l'ordre où ils sont venus. Donc, pour le client qui veut 3 produits, je lui vendrais le produit qui est venu sur 10 et 2 produits de ceux qui sont venus sur 11.

Pour le prochain client qui souhaite 2 produits, je lui vendrais un produit à partir de la date du 11 restant de la dernière commande de 3 produits et un autre parmi ceux du 12.

La question est de savoir comment connaître le prix de chaque produit vendu. Je pensais que si je pouvais savoir quelles lignes résument chaque quantité demandée, je saurais par où commencer la somme à chaque fois que je souhaite livrer une commande. Je commence donc par regarder quelles lignes résument 3 produits et gardons l’identifiant d’entrée. Pour la commande suivante, je commencerais le compte à partir de cet ID et ferait la somme jusqu'à ce qu'il résume la deuxième commande de 2 produits, etc. Je pensais que de cette façon, je pouvais suivre les prix entrants de chaque produit. Je ne vendrai donc pas les produits à partir de la date du 12 à un prix calculé à partir des premiers prix.

J'espère que vous comprenez. J'ai juste besoin de savoir quel prix a eu l'un de mes produits, donc je saurais que les premiers produits auront un prix, mais à mesure que les prix des produits augmentent, je dois augmenter mes prix aussi ... Donc, les derniers produits qui sont venus doivent être vendus un prix plus élevé. Je ne peux y parvenir que si je garde une trace de cela ...

Merci beaucoup.

Personne? Ou encore, encore plus facilement: MySQL doit sélectionner les lignes nécessaires pour que SUM (quantity) soit supérieur ou égal à 40 par exemple. Et ensuite, donnez-moi l'id de la dernière ligne qui a participé au processus de somme.

Était-ce utile?

La solution

Je ne comprends pas très bien votre question. Pouvez-vous essayer de le reformuler plus correctement? D'après ce que j'interprète, voici la structure de votre base de données:

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

Vous demandez maintenant, & "comment saurais-je quel prix correspond à chaque produit vendu" & "; Ce qui me trouble, car chaque valeur de la base de données n'a pas d'attribut price. Votre base de données ne devrait-elle pas ressembler à ceci:

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

Personnellement, je pense que votre idée de déterminer le prix vendu est imparfaite. Il serait plus logique d'ajouter quelques champs supplémentaires à votre base de données:

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        

En modifiant votre base de données, vous pouvez facilement savoir quand un produit arrive, la date de vente, son prix, peut-être sa quantité (je ne peux pas dire s'il s'agit d'un champ réel ou non).

De plus, vous pouvez simplifier et vous simplifier la vie en séparant les requêtes SQL, ou même en ajoutant du code pour effectuer une partie du travail à votre place.

Autres conseils

Avoir une troisième colonne avec un total cumulé. Ensuite, vous pouvez simplement retourner la dernière ligne où le total cumulé & Lt; = votre valeur cible.

Votre table devrait donc ressembler à:

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

REMARQUE: Si vous supprimez une ligne du tableau, n'oubliez pas de mettre à jour toutes les lignes suivantes RunningTotal -= DeletedRow.Quantity!

.

Compter sur les identifiants de table est probablement une mauvaise idée, mais si c'est vraiment comme cela que vous le faites, vous pouvez essayer quelque chose comme ceci (non testé):

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

Ce type de solution ne fonctionnera que si vous vous attendez à ce que vous n'ayez besoin que de deux lignes pour correspondre à votre somme cible. Comme ce n'est probablement pas le cas, votre meilleur choix est probablement d'essayer d'obtenir toutes les lignes et de le faire par programme sur les données renvoyées.

La solution Running Total publiée par lc est également une bonne option, bien que j’essaie généralement d’éviter de stocker des données calculées, sauf obligation absolue.

Sur la base des informations mises à jour de cette demande, j'ai une autre réponse.

Cela ne semble pas vraiment vous intéresser. Vous vous souciez davantage de la date d'arrivée des produits.

SELECT *
  FROM product
 ORDER BY product.receivedData

Traitez chaque enregistrement au fur et à mesure de son arrivée, enregistrez le prix de cet enregistrement et continuez aussi longtemps que vous le souhaitez jusqu'à ce que vous obteniez le nombre d'éléments requis. Vous devriez vous retrouver avec une liste d'articles, le nombre de stocks à ce niveau et le prix à ce niveau.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top