JeuWeb - Crée ton jeu par navigateur
[Résolu] Des altérnatives à mon système de vote - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu] Des altérnatives à mon système de vote (/showthread.php?tid=3462)

Pages : 1 2


RE: Des altérnatives à l'insertion de données au sein d'une boucle ? - Sephi-Chan - 22-12-2008

Donc, avec votre technique j'ai un scénario du style :
  1. Corwin attribue un vote Ambassadeur à Mandor ;
  2. Cela crée une entrée dans la table vote est insérée (chracter_id : #Corwin, target_id : #Mandor, type_id : #Ambassadeur, date : NOW()) ;
  3. Quand Corwin essaiera d'attribuer un nouveau vote Ambassadeur, on vérifie qu'il n'y a pas d'entrée à son nom pour ce type de vote ces X derniers jours (X étant la durée de vie de ce type de vote).

Ça me semble être une bonne approche. Merci à vous, je ferais mes essais puis je marquerai le sujet comme [Résolu] si ça me convient. Smile


Sephi-Chan, un peu débile de pas avoir compris la première fois… Confusediffle:


RE: Des altérnatives à l'insertion de données au sein d'une boucle ? - Melimelo - 22-12-2008

Moi j'ai même pas compris ce que tu voulais faire ^^ alors je te dit pas comprendre les solutions à un problèmes non-compris c'est une vrai galère Big Grin


RE: Des altérnatives à l'insertion de données au sein d'une boucle ? - Sephi-Chan - 22-12-2008

Pour ceux que ça intéresse, voici la requête :

SELECT	`vote_type`.*,
UNIX_TIMESTAMP(vote_date) AS `vote_date`,
UNIX_TIMESTAMP(DATE_ADD(vote_date, INTERVAL life_time DAY)) AS `next`,
IF(NOW() < DATE_ADD(vote_date, INTERVAL life_time DAY), 0, 1 ) AS `usable`
FROM `vote_types` AS `vote_type`
LEFT JOIN `votes` AS `vote` ON `vote`.`vote_type_id` = `vote_type`.`id` AND `vote`.`character_id` = 1

Et pour ceux que ça intéresse encore plus, voici le script de génération de cette requête avec Zend Framework :


$db = $this->getAdapter();
$select = $db->select();

$select->from(
array('vote_type' => 'vote_types'),
array('*')
);


/**
* On récupère les votes associés au personnage.
* Un vote est utilisable quand l'instant présent est antérieur
* au cumul de l'insant du vote et de se durée de vie.
*/
$select->joinLeft(
array('vote' => $this->_name),
$db->quoteInto(
"`vote`.`vote_type_id` = `vote_type`.`id` AND `vote`.`character_id` = ?",
$options['character'],
Zend_Db::INT_TYPE
),
array(
'vote_date' => new Zend_Db_Expr("UNIX_TIMESTAMP(vote_date)"),
'next' => new Zend_Db_Expr("UNIX_TIMESTAMP(DATE_ADD(vote_date, INTERVAL life_time DAY))"),
'usable' => new Zend_Db_Expr(
"IF(
DATE_ADD(vote_date, INTERVAL life_time DAY) > NOW(),
0,
1
)"
)
)
);

Merci encore à tous, Smile


Sephi-Chan


RE: [Résolu] Des altérnatives à mon système de vote - Karedas - 22-12-2008

J'ai rien compris.

Le thread commence par

Citation :Je viens vous consulter pour chercher des alternatives à l'insertion de données au sein d'une boucle.

Et finalement tu as trouvé la solution pour extraire tes données.
Au final je ne sais plus si tu voulais extraire ou inserer.

Je vais toutefois répondre à cette question
Citation :Les joueurs reçoivent des votes (chacun d'un certain types) à intervalle régulier (cet intervalle vaut la durée de vie spécifique aux votes de ce type).
Si tu veux inserer facilement le même vote à tout les joueurs.

insert into votes (character_id, type_id,getting_id) select character_id, 'typedevote', CURRENT_TIMESTAMP from table_des_characters

Edith: A lire ton code, je suis bien heureux de ne pas utiliser Zend Framework pour mes requetes, c'est vraiment imbuvable.



FROM `vote_types` AS `vote_type`
LEFT JOIN `votes` AS `vote`
Pourquoi aliaser vote_types en vote_type et votes en vote. Aliaser en a et b (pour simplifier) ou ne pas aliaser du tout (et dans ce cas prefixer les champ du nom de table complet) ok, mais aliaser pour économiser un caractère, à part s'embrouiller dans les nom, je ne comprend pas pourquoi.


RE: [Résolu] Des altérnatives à mon système de vote - Sephi-Chan - 22-12-2008

Je cherchais des alternatives à mon système de vote, qui initialement devait utiliser de nombreuses insertions. En l'occurrence, cette alternative se fait au moment de la sélection. Smile

Concernant Zend Framework. La génération de requête est tout à fait lisible : ça fait peur aux premiers instants (surtout parce que je prends beaucoup d'espace), mais c'est très simple et il y a plein d'avantages.
Fin de la parenthèse sur Zend Framework.

L'alias sert à abstraire le nom de la table au sein du reste de la requête.


Sephi-Chan


RE: [Résolu] Des altérnatives à mon système de vote - Sephi-Chan - 22-12-2008

J'ai dis fin de la parenthèse. J'ai changé d'outil parce que je voulais plus de souplesse, je suis servi.

Je me rends compte qu'il manque encore quelque chose à la requête. Il faut (si possible) que le script renvoie autant de lignes qu'il y a de type de vote. Donc, je dois grouper par vote_type.id, mais le problème c'est qu'en faisant ça, ce n'est pas le dernier vote attribué qui est récupéré.


Sephi-Chan


RE: [Résolu] Des altérnatives à mon système de vote - Karedas - 22-12-2008

(22-12-2008, 01:52 PM)Sephi-Chan a écrit : Je me rends compte qu'il manque encore quelque chose à la requête. Il faut (si possible) que le script renvoie autant de lignes qu'il y a de type de vote. Donc, je dois grouper par vote_type.id, mais le problème c'est qu'en faisant ça, ce n'est pas le dernier vote attribué qui est récupéré.


Si je comprend bien , plus jeune ligne de vote pour chaque type de vote, alors tu dois t'en sortir avec des max() et un group sur le type de vote.


SELECT `vote_type`.*,
UNIX_TIMESTAMP(max(vote_date)) AS `vote_date`,
UNIX_TIMESTAMP(DATE_ADD(max(vote_date), INTERVAL life_time DAY)) AS `next`,
IF(NOW() < DATE_ADD(max(vote_date), INTERVAL life_time DAY), 0, 1 ) AS `usable`
FROM `vote_types` AS `vote_type`
LEFT JOIN `votes` AS `vote` ON `vote`.`vote_type_id` = `vote_type`.`id` AND `vote`.`character_id` = 1
group by `vote`.`vote_type_id`



RE: [Résolu] Des altérnatives à mon système de vote - Sephi-Chan - 22-12-2008

C'est exactement la solution que j'ai appliqué.
Je m'étais dis que j'éditerai après avoir manger.
C'était sans compter sur ta réactivité.


Sephi-Chan, poète… :wow: