sql — PHP как придумать логику для проекта подсчета очков

Я начну с формулировки простых правил для этого проекта, чтобы вы могли следовать логике: Toto = 1 балл и разница мячей = 3 балла
если результат матча заканчивается 2 — 0, а пользователь прогнозирует 3 — 1, он получает разницу в 3 очка.

Логика, которую я пытаюсь реализовать, связана с тем, что программа рассматривает это как общую точку. Тотал работает так, как будто совпадение заканчивается 5 — 0, и вы прогнозируете 1 — 0, вы все равно получаете одно очко, чтобы угадать правильный результат, проблема в том, что работает с ничьей, если матч заканчивается как ничья 3 — 3, а вы предсказали 1 — 1, то получите 1 очко

вот логика для разницы целей в коде php

// check for goal diff bonus
$goal_diff_bonus = Football_Pool_Utils::get_fp_option( 'diffpoints', FOOTBALLPOOL_DIFFPOINTS, 'int' );
if ( ! $full && $home != $away && ( $home - $user_home ) == ( $away - $user_away ) ) {
$score += $goal_diff_bonus;
}

if ( $joker == 1 && $this->has_jokers ) $score *= Football_Pool_Utils::get_fp_option( 'joker_multiplier', FOOTBALLPOOL_JOKERMULTIPLIER, 'int' );

return $score;

а вот текущая логика для тотальных точек

$full = false;
$score = 0;
// check for toto result
if ( $this->is_toto_result( $home, $away, $user_home, $user_away ) == true ) {
// check for exact match
if ( $home == $user_home && $away == $user_away ) {
$score = (int) Football_Pool_Utils::get_fp_option( 'fullpoints', FOOTBALLPOOL_FULLPOINTS, 'int' );
$full = true;
} else {
$score = (int) Football_Pool_Utils::get_fp_option( 'totopoints', FOOTBALLPOOL_TOTOPOINTS, 'int' );
}
}

я пытаюсь сделать ничью, которая, если игрок угадывает 1-1, а результат — 5-5 или любая другая ничья — разница мячей в 3 очка.

чтобы избежать путаницы, предсказание правильного исхода матча

следующий код должен быть в состоянии взять счет хозяев и гостей и игроков хозяев и гостей, и если они приведут к ничьей, он должен дать ему бонус разницы мячей, поэтому согласно этому коду он должен иметь такую ​​функциональность

// check for goal bonus
$goal_bonus = Football_Pool_Utils::get_fp_option( 'goalpoints', FOOTBALLPOOL_GOALPOINTS, 'int' );
if ( $home == $user_home ) $score += $goal_bonus;
if ( $away == $user_away ) $score += $goal_bonus;

// check for goal diff bonus
$goal_diff_bonus = Football_Pool_Utils::get_fp_option( 'diffpoints', FOOTBALLPOOL_DIFFPOINTS, 'int' );
if ( ! $full && $home != $away && ( $home - $user_home ) == ( $away - $user_away ) ) {
$score += $goal_diff_bonus;
}

if ( $joker == 1 && $this->has_jokers ) $score *= Football_Pool_Utils::get_fp_option( 'joker_multiplier', FOOTBALLPOOL_JOKERMULTIPLIER, 'int' );

return $score;
}

также то же самое нужно изменить в коде sql для этой функции

SELECT

0, %d AS score_type, m.play_date AS score_date, m.id AS match_id, u.ID AS user_id

, IF ( p.has_joker = 1, %d, 1 ) AS `score`

, IF ( m.home_score = p.home_score AND m.away_score = p.away_score, 1, NULL ) AS `full`

, IF ( m.home_score = p.home_score AND m.away_score = p.away_score, NULL,

IF (

IF ( m.home_score > m.away_score, 1, IF ( m.home_score = m.away_score, 3, 2 ) )

=

IF ( p.home_score > p.away_score, 1, IF ( p.home_score = p.away_score, 3, 2 ) )

, IF ( p.home_score IS NULL OR p.away_score IS NULL, NULL, 1 )

, NULL

)

) AS `toto`

, IF ( m.home_score = p.home_score,

IF ( m.away_score = p.away_score, 2, 1 ),

IF ( m.away_score = p.away_score, 1, NULL )

) AS `goal_bonus`

, IF( m.home_score = p.home_score AND m.away_score = p.away_score, NULL,

IF(

m.home_score <> m.away_score AND

( CAST( m.home_score AS SIGNED ) - CAST( p.home_score AS SIGNED ) )

=

( CAST( m.away_score AS SIGNED ) - CAST( p.away_score AS SIGNED ) )

, 1, NULL

)

) AS `goal_diff_bonus`

, 0 AS `ranking`

, %d AS `ranking_id`

FROM {$wpdb->users} u

LEFT OUTER JOIN {$prefix}matches m ON ( 1 = 1 )

LEFT OUTER JOIN {$prefix}predictions p

ON ( p.match_id = m.id AND ( p.user_id = u.ID OR p.user_id IS NULL ) )

WHERE m.home_score IS NOT NULL AND m.away_score IS NOT NULL AND u.ID IN ( {$user_ids} ) ";

Сценарии sql и php должны работать вместе, чтобы сделать счет ничьи равным бонусу разницы мячей

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …