Seite 69 von 108

Verfasst: 08.06.2008 11:46
von buegelfalte
dasinnerevombrötchen hat geschrieben:wie kann es denn sein, dass zwei user, die beide erste spiele korrekt getippt haben, unterschiedliche punkte haben?
Tritt bei mir auch auf, scheint ein Fehler in der Punktevergabe für "Sonderpunkt bei alleiniger korrekter Tipp" zu sein ... müßte am besten mal derjenige drüberkucken, der das ursprünglich gebaut hat (Patch ?).
double78 hat geschrieben:nun ist er weg :grin: ,thx buegelfalte
Da nich für ;)


Und hier nochmal ein Versuch zur Korrektur dieser nervigen Tendenzpfeile - ich habe die vorhandenen Funktionen jetzt ein paar Stunden lang komplett auf links gezogen und kann folgende Lösung anbieten, die jetzt endlich die korrekten Tendenzen anzuzeigen scheint. (Und noch schneller läuft, da nicht für jeden User wieder ALLE Tipps bis vor dem letzten Spiel geholt werden, wie das vorher der Fall war.)

em_stats.php

finden

Code: Alles auswählen

for ( $i = 0; $i < count($em_users_data); $i++ )
{
   $int_userposalt = $int_userpos; 
   $int_userpos = ($int_userpkt != $em_users_data[$i]['user_points']) ? $int_userpos + 1 : $int_userpos; 

   // user position yesterday 
   $int_userpos_yesterday = get_rank_of_yesterday($em_users_data[$i]['tipp_user']); 

   // compare the absolute positions 
   if($int_userpos_yesterday < $int_userpos ) 
   { 
      $userpos_change = '<img src="./images/em/down.gif" alt="verschlechtert" title="verschlechtert" border="0" />'; 
   } 
   else if ($int_userpos_yesterday == $int_userpos ) 
   { 
      $userpos_change = '<img src="./images/em/stay.gif" alt="unverändert" title="unverändert" border="0" />'; 
   } 
   else if ($int_userpos_yesterday > $int_userpos ) 
   { 
      $userpos_change = '<img src="./images/em/up.gif" alt="verbessert" title="verbessert" border="0" />'; 
   }
ersetzen mit

Code: Alles auswählen

$arr_oldranks = array();
$arr_oldranks = get_em_user_points_up_to_yesterday();

for ( $i = 0; $i < count($em_users_data); $i++ )
{
	$int_userposalt = $int_userpos;
	$int_userpos = ($int_userpkt != $em_users_data[$i]['user_points']) ? $i + 1 : $int_userpos;
	$int_userposabsolute = ($int_userpkt != $em_users_data[$i]['user_points']) ? $int_userposabsolute + 1 : $int_userposabsolute;

	// user position yesterday
	$int_userpos_yesterday = $arr_oldranks[$em_users_data[$i]['tipp_user']];

	// compare the absolute positions
	if($int_userpos_yesterday < $int_userposabsolute )
	{
		$userpos_change = '<img src="./images/em/down.gif" alt="Down" border="0" />';
	}
	else if ($int_userpos_yesterday == $int_userposabsolute )
	{
		$userpos_change = '<img src="./images/em/stay.gif" alt="Stay" border="0" />';
	}
	else if ($int_userpos_yesterday > $int_userposabsolute )
	{
		$userpos_change = '<img src="./images/em/up.gif" alt="Up" border="0" />';
	}
includes/functions_em.php

finden

Code: Alles auswählen

function get_em_user_points_up_to_yesterday() {

	global $db;

	// Load Config
	$em_config    = array();  // Config values
	$em_config    = get_em_config();

	$timestamp_last_game_before_this_day = get_timestamp_for_ranking_history();

	//
	// Get users data
	//

	$int_userpkt = -1;
	$int_userpos = 0;

	$sql = "SELECT A.tipp_user , sum( A.tipp_points ) AS user_points, count( A.tipp_points ) AS user_total_tipps, count(
       B.tipp_points ) AS user_points_tendency, count( C.tipp_points ) AS user_points_difference, count( D.tipp_points ) AS user_points_result
       FROM  " . EM_TIPPS_TABLE . " A
       LEFT JOIN " . EM_TIPPS_TABLE . " B ON A.tipp_id = B.tipp_id
       AND A.tipp_points = " . $em_config['points_tendency'] . "
       LEFT JOIN " . EM_TIPPS_TABLE . " C ON A.tipp_id = C.tipp_id
       AND A.tipp_points = " . $em_config['points_tordiff'] . "
       LEFT JOIN " . EM_TIPPS_TABLE . " D ON A.tipp_id = D.tipp_id
       AND A.tipp_points >= " . $em_config['points_match'] . "
       inner join (Select game_id, Game_time FROM " . EM_GAMES_TABLE . " Union Select game_id, Game_time FROM " . EM_FINALS_TABLE . ") as E on E.game_id = A.tipp_game and   E.game_time  < ". intval($timestamp_last_game_before_this_day) ."
       GROUP BY A.tipp_user
       ORDER BY user_points DESC, user_points_result DESC, user_points_difference DESC, user_points_tendency DESC, tipp_user ASC";

	if( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Could not get historical user tipps data', '', __LINE__, __FILE__, $sql);
	}

	$em_user_points_up_to_yesterday = array();
	while ( $row = $db->sql_fetchrow($result) )
	{
		if ($int_userpkt != $row['user_points']) {$int_userpos =  $int_userpos + 1;}
		//   $em_users[][$row['tipp_user']] = $row;
		$em_user_points_up_to_yesterday[] =   $row['tipp_user'];
		if ($int_userpkt != $row['user_points']) {$int_userpos =  $int_userpos + 1;}

		$int_userpkt =$row['user_points'];
	}
	$db->sql_freeresult($result);

	return $em_user_points_up_to_yesterday;
}
ersetzen mit

Code: Alles auswählen

function get_em_user_points_up_to_yesterday() {

	global $db;

	// Load Config
	$em_config    = array();  // Config values
	$em_config    = get_em_config();

	$timestamp_last_game_before_this_day = get_timestamp_for_ranking_history();

	//
	// Get users data
	//
	$sql = "SELECT A.tipp_user , sum( A.tipp_points ) AS user_points, count( A.tipp_points ) AS user_total_tipps, count(
       B.tipp_points ) AS user_points_tendency, count( C.tipp_points ) AS user_points_difference, count( D.tipp_points ) AS user_points_result
       FROM  " . EM_TIPPS_TABLE . " A
       LEFT JOIN " . EM_TIPPS_TABLE . " B ON A.tipp_id = B.tipp_id
       AND A.tipp_points = " . $em_config['points_tendency'] . "
       LEFT JOIN " . EM_TIPPS_TABLE . " C ON A.tipp_id = C.tipp_id
       AND A.tipp_points = " . $em_config['points_tordiff'] . "
       LEFT JOIN " . EM_TIPPS_TABLE . " D ON A.tipp_id = D.tipp_id
       AND A.tipp_points >= " . $em_config['points_match'] . "
       inner join (Select game_id, Game_time FROM " . EM_GAMES_TABLE . " Union Select game_id, Game_time FROM " . EM_FINALS_TABLE . ") as E on E.game_id = A.tipp_game and   E.game_time  < ". intval($timestamp_last_game_before_this_day) ."
       GROUP BY A.tipp_user
       ORDER BY user_points DESC, user_points_result DESC, user_points_difference DESC, user_points_tendency DESC, tipp_user ASC";
	if( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Could not get historical user tipps data', '', __LINE__, __FILE__, $sql);
	}

	$em_user_points_up_to_yesterday = array();
	$int_userposabsolute = 0;
	$int_pktalt = -1;
	while ( $row = $db->sql_fetchrow($result) )
	{
		$int_userposabsolute = ($row['user_points'] != $int_pktalt) ? $int_userposabsolute + 1 : $int_userposabsolute;
		$em_user_points_up_to_yesterday[$row['tipp_user']] = $int_userposabsolute;
		$int_pktalt = $row['user_points'];
	}
	$db->sql_freeresult($result);

	return $em_user_points_up_to_yesterday;
}
(Die Funktionen get_em_user_points_up_to_yesterday_SingleUser und get_rank_of_yesterday in der functions_em sind übrigens überflüssig.)

B.

Verfasst: 08.06.2008 11:56
von dasinnerevombrötchen
oki, dann müsste es für's erste helfen, die punktevergabe abzuschalten :D

Verfasst: 08.06.2008 12:04
von double78
@buegelfalte

hab deine Änderungen in der em_stats.php & includes/functions_em.php vorgenommen und nun hat der erste Platz nen Punkt und alle anderen dahinter nen roten Pfeil nach unten. Also bei mir geht es nicht :cry:

Verfasst: 08.06.2008 12:08
von buegelfalte
double78 hat geschrieben:nun hat der erste Platz nen Punkt und alle anderen dahinter nen roten Pfeil nach unten.
Bist du denn sicher, daß das nicht korrekt ist ?
Ich habe einige Einträge direkt in der DB überprüft, und die Tendenzen stimmen jetzt bei mir.

Verfasst: 08.06.2008 12:14
von double78
buegelfalte hat geschrieben: Bist du denn sicher, daß das nicht korrekt ist ?
Ich habe einige Einträge direkt in der DB überprüft, und die Tendenzen stimmen jetzt bei mir.
mmhh sicher bin ich mir nicht aber nach 2 Ergebnissen mit richtiger Tendenz denk ich mal sollte ein grüner Pfeil kommen.

Verfasst: 08.06.2008 12:17
von buegelfalte
double78 hat geschrieben:nach 2 Ergebnissen mit richtiger Tendenz denk ich mal sollte ein grüner Pfeil kommen.
Wieso das ?
Gestartet bist du auf Position 0 (wie jeder), hat nur einer MEHR Punkte als du mit 1x richtiger Tendenz, ist der auf einer Position VOR dir, du bist also abgerutscht und bekommst einen roten Pfeil.
Hast du beim nächsten Spiel wieder nur richtige Tendenz, vor dir sind aber noch zwei Ränge, bist du wieder abgerutscht und hast im Vergleich zur Position vor dem letzten Spiel auch wieder einen roten Pfeil !

Verfasst: 08.06.2008 12:21
von Svenson
Hmmm, ich glaub bei mir funktioniert das auch nicht richtig...die ersten 4 haben nen Punkt, sonst nur rote Pfeile...

Wieso kann man eigentlich nicht den gleichen Code wie beim WM-Tippspiel verwenden? Da hats doch super funktioniert?!

Verfasst: 08.06.2008 12:22
von double78
ja hast recht,ist wohl doch noch zu früh für mich :oops:
ich las die änderungen mal drin und schau heute Abend wie sich was ändert.

Verfasst: 08.06.2008 12:22
von buegelfalte
Svenson hat geschrieben:Hmmm, ich glaub bei mir funktioniert das auch nicht richtig...
Sicher ???
"ich glaub" hilft nicht wirklich weiter ...

Am besten: Rangliste aufrufen, stehen lassen, heute abend ein Ergebnis eintragen und in einem neuen Fenster danach die aktualisierte Rangliste aufrufen.
Dann kann man vergleichen, obs wirklich nicht richtig klappt.
Svenson hat geschrieben:Wieso kann man eigentlich nicht den gleichen Code wie beim WM-Tippspiel verwenden? Da hats doch super funktioniert?!
Keine Ahnung, ich hab das nicht umgebaut, dafür wirds schon einen Grund gegeben haben ...

Verfasst: 08.06.2008 12:33
von double78
ich hätte da noch ne Idee für ein Portal Addon was ich aber leider nicht erstellen kann :roll:

ein Block mit den Aktuellen Spielen des laufenen Tags + die ersten 3 Plätze in der Rangliste

vielleicht kann das ja einer verwirklichen