28-03-2017, 03:07 PM
@TerRowan
Clairement pas sur de grands jeux de données ! Après, cela peut faire une première ébauche pour les débuts.
Si nécessaire, une autre colonne "total de ressources déjà mangée par les autres" peut également être rajoutée. Elle vaudra alors qqc du genre UPDATE population_infos pi SET ressources_consommes_par_les_precedents = (SELECT SUM(ressources_consommes) FROM population ... WHERE population.priorite > pi.priorite). Il suffit alors de n'UPDATE que les lignes pour lesquelles ressources_consommes_par_les_precedents <= ressources_dispos.
Clairement pas sur de grands jeux de données ! Après, cela peut faire une première ébauche pour les débuts.
Citation :Tu dois probablement pouvoir faire un gros SELECT qui te ressort toutes les ressources disponiblesAttention aux concurrences: vu que le temps de traiement va être non négligeable (apparamment), que se passera-t-il si un joueur altère ses ressources pendant le traitement? l'altération sera perdue? Cf SELECT FOR UPDATE / LOCK IN SHARE MODE
Citation : tant que tu as un rand() individuel à appliquer, tu auras forcément un update par personnage.Pas nécessairement. Là, si j'ai bien compris, l'idée est de donner de la nourriture au pif. Cela peut se faire en rajoutant une colonne (dans une temp table ou dans la table de population) indiquant la "priorité d'accès aux ressources". Cette colonne peut être alors remplie par un RAND, ou par l'utilisateur. Il suffit ensuite de faire son ORDER BY sur cette colonne pour attribuer les ressources à chaque tranche de population.
Si nécessaire, une autre colonne "total de ressources déjà mangée par les autres" peut également être rajoutée. Elle vaudra alors qqc du genre UPDATE population_infos pi SET ressources_consommes_par_les_precedents = (SELECT SUM(ressources_consommes) FROM population ... WHERE population.priorite > pi.priorite). Il suffit alors de n'UPDATE que les lignes pour lesquelles ressources_consommes_par_les_precedents <= ressources_dispos.