Seite 73 von 108

Verfasst: 09.06.2008 09:21
von Toxic82
@buegelfalte

Kannst Du mal bitte nochmal den Link zu deinem Code bzgl. der Rangliste geben.

Ich habe ebenfalls die Rangliste gefixt, so dass sie bisher so funktioniert wie sie soll.

Nur ich habe den Code an einigen Stellen komplett ändern müssen. Ich würde gern deinen Code mit meinem Vergleichen, dann kann ich ja mal posten was ich habe vllt schaffen wir es dann, alle User glücklich zu stellen ;)

Verfasst: 09.06.2008 09:24
von buegelfalte
einfach zurückblättern

da gibts aber nicht mehr viel zu vergleichen, der Code funktioniert ;)

Verfasst: 09.06.2008 09:46
von Toxic82
Also falls s doch jemanden Interessiert, vllt diejendigen wo es nicht gehen soll. :grin:

Meine em_stats.php sieht gleich aus, ich habe nur was an 2 Funktionen geändert:

Mein Code sieht so aus:



functions_em.php

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) )
	{
		//   $em_users[][$row['tipp_user']] = $row;

		if ($int_userpkt != $row['user_points']) {$int_userpos =  $int_userpos + 1;}

		$int_userpkt =$row['user_points'];
		$tipp_id =    $row['tipp_user'];

		$em_user_points_up_to_yesterday[$tipp_id] =   $int_userpos;
		
	}
	$db->sql_freeresult($result);
    #print_r($em_user_points_up_to_yesterday);
	return $em_user_points_up_to_yesterday;
}

Code: Alles auswählen

 function get_rank_of_yesterday($userid){


   $em_user_points_up_to_yesterday = get_em_user_points_up_to_yesterday();



   $rank_of_yesterday = $em_user_points_up_to_yesterday[intval($userid)];


    return $rank_of_yesterday;
 }
Bei mir hat das array_search nicht funktioniert, warum auch immer. Es kam dadurch immer fehlerhafte Ergebnisse. Den Code wie ich ihn jetzt habe, sollte auch mit php < 4.0.5 funktionieren.

Verfasst: 09.06.2008 10:34
von buegelfalte
Toxic82 hat geschrieben:Also falls s doch jemanden Interessiert, vllt diejendigen wo es nicht gehen soll. :grin:
Meine em_stats.php sieht gleich aus, ich habe nur was an 2 Funktionen geändert:
Wenn deine em_stats.php identisch mit meiner ist, machen deine Änderungen an den Funktionen auch nichts anderes als mein Code ...

Verfasst: 09.06.2008 10:52
von Toxic82
buegelfalte hat geschrieben:
Toxic82 hat geschrieben:Also falls s doch jemanden Interessiert, vllt diejendigen wo es nicht gehen soll. :grin:
Meine em_stats.php sieht gleich aus, ich habe nur was an 2 Funktionen geändert:
Wenn deine em_stats.php identisch mit meiner ist, machen deine Änderungen an den Funktionen auch nichts anderes als mein Code ...
Jaein. Zumindest das array_search könnte bei einigen Usern Probleme hervorrufen.

In der em_stats.php wird ja auch nur der übermittelte Wert (alte Postition) mit dem neuen Wert (neue Position) verglichen. Das ermitteln der alten Position ist ja aber in der function_em.php.

Ich hatte das Gefühl, dass das Array, welches mit der Userid und der alten Position gefüllt wurde, fehlerhaft durch das array_search übermittel wurde. Und dadurch der Vergleich beider Positionen in der em_stats.php ebenfalls fehlerhaft war. Du nutzt, wenn ich deinen Code richtig angeschaut habe, auch das array_search, um die alte Postion der jeweiligen Userid zu ermitteln.

Einfacher ist es aber, einfach das Array so zu speichern, dass die alte Position ermittelt wird, diese dann dem Array-Key zugewiesen wird.

bsp. User mit der ID 12 war gestern 4 Platz.

Code: Alles auswählen


$em_user_points_up_to_yesterday[$tipp_id] =   $int_userpos; 

Array( [12]=> 4)
damit hat der User mit ID 12 den genauen Wert. Warum soll man dann noch nach dem Wert suchen?, Einfacher ist es, einfach seinen Wert auszugeben.

Code: Alles auswählen

   $rank_of_yesterday = $em_user_points_up_to_yesterday[intval($userid)]; 

   $rank_of_yesterday = $em_user_points_up_to_yesterday[12]; 

$rank_of_yesterday = 4
Ohne ein array_search, welches bei einigen Usern mit php < 4.0.5 eh nicht funktioniert.

Verfasst: 09.06.2008 10:55
von buegelfalte
Toxic82 hat geschrieben:
buegelfalte hat geschrieben:Wenn deine em_stats.php identisch mit meiner ist, machen deine Änderungen an den Funktionen auch nichts anderes als mein Code ...
Jaein. Zumindest das array_search könnte bei einigen Usern Probleme hervorrufen.
Benutze ich das denn ? Nö. :)
Toxic82 hat geschrieben:Einfacher ist es aber, einfach das Array so zu speichern, dass die alte Position ermittelt wird, diese dann dem Array-Key zugewiesen wird.
Richtig, und genau das macht mein Code ...

Verfasst: 09.06.2008 11:07
von Toxic82
buegelfalte hat geschrieben:
Toxic82 hat geschrieben:
buegelfalte hat geschrieben:Wenn deine em_stats.php identisch mit meiner ist, machen deine Änderungen an den Funktionen auch nichts anderes als mein Code ...
Jaein. Zumindest das array_search könnte bei einigen Usern Probleme hervorrufen.
Benutze ich das denn ? Nö. :)
Toxic82 hat geschrieben:Einfacher ist es aber, einfach das Array so zu speichern, dass die alte Position ermittelt wird, diese dann dem Array-Key zugewiesen wird.
Richtig, und genau das macht mein Code ...
Ok, jetzt seh ichs :oops:

Ich habe scheinbar nicht den Quellcode hier im Forum beachtet, sondern den aus der 0.7 Version. Ich sehe, dass Du direkt die Funktion ohne die array_search Funktion aufrufst :D.

Dann ist es tatsächlich die gleich :)

Verfasst: 09.06.2008 11:09
von buegelfalte
Toxic82 hat geschrieben:Ich habe scheinbar nicht den Quellcode hier im Forum beachtet, sondern den aus der 0.7 Version.
Jo, da war der Fehler noch drin, mein Code kam erst nachher ;)

Verfasst: 09.06.2008 11:14
von svenfranzisko
Ich habe eben eine SMS eines Tippers erhalten, er beschreibt er hätte ein paar Tipps geändert und hätte plötzlich 3 Punkte mehr.

Ich hab mir das mal angesehen, er hat auf einmal 6 Punkte für jeden Exakten Tipp erhalten anstatt den eingestellten 5.

Bild wie es sein sollte:
[ externes Bild ]

Nach der Änderung von Tipps:
[ externes Bild ]

Jemand ne Idee was das sein könnte?
Wenn das öfter passiert kann ich das Teil dicht machen!

Gruß, Svenfranzisko


Edit:
Ich hab die Option "Zusatzpunkte für Tippgeschick " aktiv, dass wäre ja die Einzige Möglichkeit 6 Punkte zu bekommen, dass Ergebnis hatten aber 3 Tipper richtig.

Verfasst: 09.06.2008 11:22
von buegelfalte
svenfranzisko hat geschrieben:Wenn das öfter passiert kann ich das Teil dicht machen!
entspann dich, svenhamm 8)

das hatte ich hier schon behoben (bevor du jetzt 73 Seiten nachliest)
http://www.phpbb.de/viewtopic.php?p=999398#999398

einfach das Ergebnis nach der Änderung nochmal neu speichern, dann klappts auch mit den Punkten !