2009-01-13 8 views
0

J'utilise MySQL et PHP. J'ai une table qui contient l'identifiant et la quantité des colonnes. Je voudrais récupérer l'id de la rangée qui est la dernière à additionner la quantité puisqu'elle atteint le nombre 40 à la somme. Pour être plus précis. J'ai 3 lignes dans la base de données. Un avec la quantité 10, un avec la quantité 30 et un avec la quantité 20. Donc si je fais la somme des quantités pour avoir le résultat 40, je résumerais les deux premiers moyens de sorcière: 10 + 30 = 40. De cette façon, le dernier Id que est utilisé pour additionner le nombre 40 est 2. Je veux juste savoir l'id de la dernière rangée qui est utilisée pour compléter la somme de 40.MySQL sélectionner des enregistrements qui résume

Je donnerais plus de détails si demandé. JE VOUS REMERCIE!!


Permettez-moi de cette façon: J'ai vraiment 6 produits dans ma main. Le premier est venu à ma possession à la date de 10, les 3 suivants sont venus à la date du 11 et les 2 derniers sont venus le 12

Maintenant, je veux vendre 3 produits de mon stock. Et vouloir les vendre dans l'ordre qu'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 veut 2 produits, je lui vendrais un produit de la La question est de savoir comment je pourrais savoir quel prix avait chaque produit que j'ai vendu? Je pensais que si je pouvais savoir quelles lignes résumaient chaque quantité demandée, je saurais où commencer la somme chaque fois que je veux livrer une commande. Donc d'abord je regarderais quelles lignes résument 3 produits et garder l'identifiant d'entrée. Pour la prochaine commande, je commencerais le compte à partir de cette identification et somme jusqu'à ce qu'il résume la deuxième commande de 2 produits et ainsi de suite. Je pensais que de cette façon, je pouvais suivre les prix entrants que chaque produit avait. Donc, je ne vais pas vendre les produits à partir de la date de 12 à un prix composé en utilisant les premiers prix.

J'espère que vous comprenez. J'ai juste besoin de savoir quel prix avait un de mes produits donc je saurais que les premiers produits auraient un prix mais comme 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 plus simple: MySQL doit sélectionner les lignes nécessaires pour que SUM (quantity) soit supérieur ou égal à 40 par exemple. Et puis pour me donner l'identifiant de la dernière rangée qui a participé au processus de somme.

Répondre

0

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 

Maintenant, vous demandez, « comment pourrais-je connaître le prix qui avait chaque produit vendu, je »? Ce qui m'embrouille, puisque chaque valeur dans la base de données n'a pas d'attribut de prix. Ne devrait pas votre base de données 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 trouver prix de vente est défectueux. Il serait plus judicieux d'ajouter quelques champs à la 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 changeant la base de données, vous pouvez facilement suivre lorsqu'un produit arrive, la date de vente, son prix, la quantité peut-être (je peux ne dites pas si c'est un champ réel ou non).

En outre, vous pouvez simplifier et faciliter votre vie en séparant les requêtes sql, ou même en ajoutant du code pour faire du travail pour vous.

1

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

donc votre table devrait ressembler à:

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

REMARQUE: Si vous supprimez une ligne dans le tableau, souvenez-vous de mettre à jour toutes les lignes suivantes RunningTotal -= DeletedRow.Quantity!

0

En se fondant sur la table ID de est probablement une mauvaise idée pour cela, mais si c'est la façon dont il est vraiment fait, vous pouvez essayer quelque chose comme ça (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 sera seulement travaillez si vous vous attendez à ce que vous n'ayez besoin que de deux rangées pour égaler votre somme cible.Comme ce n'est probablement pas le cas, votre meilleur pari est probablement d'essayer d'obtenir toutes les lignes et de le faire par programme sur les données retournées.

La solution Running Total mise en ligne par lc est également une bonne option, bien que j'essaie généralement d'éviter de stocker des données calculées sauf si je dois absolument le faire.


D'après les informations mises à jour de cette demande, j'ai une autre réponse.

Il ne semble pas que vous vous souciez de l'inventaire. Vous souciez plus lorsque les produits sont entrés.

SELECT * 
    FROM product 
ORDER BY product.receivedData 

processus chaque enregistrement comme ils viennent, stocker le prix de cet enregistrement, et continuer aussi longtemps que nécessaire jusqu'à ce que vous atteignez le nombre d'articles que vous avoir besoin. Vous devriez vous retrouver avec une liste d'articles, le nombre d'inventaire à ce niveau et le prix à ce niveau.

Questions connexes