2010-12-15 135 views
3

Je contiennent des données telles que ...Sélectionnez les enregistrements dont les valeurs sont égales ou supérieures à (mais une seule sur) une autre valeur?

ID | Amount 
----------------- 
1  | 50.00 
2  | 40.00 
3  | 15.35 
4  | 70.50 

etc. Et j'ai une valeur que je travaille jusqu'à, dans ce cas, disons 100,00. Je veux obtenir tous les enregistrements jusqu'à 100.00 dans l'ordre de l'ID. Et je veux en saisir un de plus, parce que je veux le remplir jusqu'à la valeur que je vise. C'est-à-dire, je veux obtenir, dans cet exemple, les enregistrements 1, 2 et 3. Les deux premiers totalisent jusqu'à 90,00, et 3 poussent le total sur 100,00. Donc, je veux une requête pour le faire pour moi. Est-ce qu'une telle chose existe dans MySQL, ou vais-je devoir recourir à la mise en boucle de tableaux PHP?

Modifier: Pour le mettre en termes anglais: Disons qu'ils ont 100 $ dans leur compte. Je veux savoir lesquelles de leurs demandes peuvent être payées, totalement ou partiellement. Je peux donc rembourser les 50 $ et les 40 $, et une partie des 15,35 $. À ce stade du programme, je me fiche de la partialité; Je veux seulement savoir quelle qualité en aucune façon.

+0

donner un exemple de la façon dont vous l'utilisez - pour les tests contre, ou que vous voulez un total de roulement ... –

Répondre

4

Oui, il est possible

set @total:=0; 
select * from 
(
    select *, if(@total>100, 0, 1) as included, @total:[email protected]+Amount 
    from your_table 
    order by id 
) as alls 
where included=1 
order by id; 
+0

Fonctionne magnifiquement, merci. J'avais une version précédente de ceci où c'était fait en PHP (avec des trucs comme "apply min (restant, montant), if (restant = 0) break"), et je suis beaucoup plus content que MySQL fasse les maths plutôt que de les boucler par PHP jusqu'à ce que le compte à court d'argent. :) – Andrew

0

En se référant à la dernière phrase: ne pas mysql sum le couper?

+0

Je veux que les dossiers individuels, et non le total montant possible ... Je l'ai peut-être écrit étrangement avec ce "si". Je sais qu'ils ont 100 $ dans le compte, je veux savoir quels dossiers peuvent payer jusqu'à cela. – Andrew