Vous avez besoin d'un moyen de classer les enregistrements qui ont la priorité sur les autres lors de l'ajout de vos unités maximales. Sinon, comment savez-vous quel ensemble d'enregistrements totalisant jusqu'à 600 conservez-vous ?
SELECT d.id, d.size, d.date_created
FROM documents d
INNER JOIN documents d2 ON d2.tag_id=d.tag_id AND d2.date_created >= d.date_created
WHERE d.tag_id=26
GROUP BY d.id, d.size, d.date_created
HAVING sum(d2.size) <= 600
ORDER BY d.date_created DESC
Il ne s'agit que d'une question de base pour vous aider à démarrer, et il reste encore un certain nombre de problèmes à résoudre :
- Elle s'arrête à <=600, donc dans la plupart des cas, vous n'atteindrez pas exactement votre limite de taille. Cela signifie que vous voudrez peut-être le modifier pour autoriser un enregistrement de plus. Par exemple, si le premier enregistrement est> 600, la requête ne renverra rien, et cela pourrait être un problème.
- Cela ne fera rien pour vérifier ultérieurement d'autres enregistrements plus petits qui pourraient encore tenir sous le plafond.
- Les enregistrements avec des valeurs date_created identiques pourraient être en quelque sorte "comptés deux fois" ici et là.