Better matching algo

This commit is contained in:
Ruben 2016-09-21 23:43:20 +01:00
parent 6a31f650be
commit 8380f40638
2 changed files with 8 additions and 5 deletions

View file

@ -14,11 +14,11 @@ class HitRepository extends EntityRepository
public function getBetterHit(Hit $hit) {
// we want only the slightly better hit...
$query = $this->_em->createQuery(
"SELECT h, SUM(h.score) as HIDDEN totalScore FROM ".Hit::class." h WHERE h.target IN (:targets) AND totalScore > :score GROUP BY h.game ORDER BY totalScore DESC"
"SELECT h, SUM(h.score) as HIDDEN totalScore FROM ".Hit::class." h WHERE h.target IN (:targets) GROUP BY h.game HAVING totalScore > :score ORDER BY totalScore DESC"
)
->setMaxResults(1)
->setParameters([
'score' => $hit->getScore(),
'score' => $this->getTotalScoreForHit($hit),
'targets' => $this->getTargetSetForTarget($hit->getTarget()),
]);
$betterHit = $query->getOneOrNullResult();
@ -70,11 +70,11 @@ class HitRepository extends EntityRepository
/**
* Get the total score of the TargetSet to which this hit belongs
* @param \EmotionHero\Models\Hit $hit
* @return float
* @return string (return float as string, so it can be fed back to mysql without floating point issues)
*/
public function getTotalScoreForHit(Hit $hit) {
$targets = $this->getTargetSetForTarget($hit->getTarget());
return (float) $this->_em->createQuery(
return $this->_em->createQuery(
"SELECT SUM(h.score) FROM ".Hit::class." h WHERE h.game = :game AND h.target IN (:targets)"
)
->setParameters([

View file

@ -333,9 +333,12 @@ echo "<h3><span class='last'>last</span><span class='vs'>vs</span><span class='p
// echo "<p>".\PrettyDateTime\PrettyDateTime::parse($currentHit->getGame()->getOriginalGameAt())."</p>";
echo "<p>aim:";
foreach($targetSet as $target) {
" {$target->getScore()}% {$target->getEmotion()->getName()}";
echo " {$target->getScore()}% {$target->getEmotion()->getName()}";
}
echo "</p>";
if(empty($betterHit)) {
echo "<p>Best attempt so far</p>";
}
//echo "<p>aim: {$currentHit->getTarget()->getScore()}% ".$currentHit->getTarget()->getEmotion()->getName()."</p>";
echo "<ul>";
$expressions = array_keys($currentHit->getExpressions()::$EXPRESSIONS_2ND_PERSON);