webForumDet fria alternativet

Hämta de 2 lägst värdena

PHP

5 svar · 2 091 visningar · startad av Farmed

Medlem sedan maj 20113 inlägg
Frågan#1

Jag håller på med en topplista där summeringen hämtar värden från sql.
10veckors värden hämtas per person. Det jag sedan vill göra är att subtrahera med de 2 lägsta. Så resultatet som visas är de bästa 8veckors resultaten.

Tacksam för svar! :bire

Medlem sedan juni 20031 837 inlägg
#2

Börja med att visa din befintliga kod så är det lättare att hjälpa dig.

Medlem sedan maj 20113 inlägg
#3

Okey. Jag är som sagt ny när det gäller php/sql och har lekt ihop en tips-sm hemsida. Det jag sedan har gjort är att jämföra tipparens värden med admins värden.

    
<?php

$select_user = mysql_query("SELECT * FROM tips WHERE username='$_SESSION[username]' AND week='$res_row[week]' ORDER BY id DESC LIMIT 1") or die(mysql_error());
$select_admin = mysql_query("SELECT * FROM tipsii WHERE username='admin' AND week='$res_row[week]' ORDER BY id DESC LIMIT 1") or die(mysql_error());
    $select_adminm = mysql_query("SELECT * FROM tipsM WHERE username='admin' ORDER BY id DESC LIMIT 1") or die (mysql_error());                                               

    $res_row = mysql_fetch_array($select_adminm);   
$user_array = mysql_fetch_array($select_user);
$admin_array = mysql_fetch_array($select_admin);

if ($user_array['r101'] == $admin_array['r1'] or $user_array['r102'] == $admin_array['r1'] or $user_array['r103'] == $admin_array['r1']){
	$user1 = 1;
	}
else {
$user1 = 0;
	}  
if ($user_array['r201'] == $admin_array['r2'] or $user_array['r202'] == $admin_array['r2'] or $user_array['r203'] == $admin_array['r2']){
	$user2 = 1;
	}
else {
$user2 = 0;
	}  
if ($user_array['r301'] == $admin_array['r3'] or $user_array['r302'] == $admin_array['r3'] or $user_array['r303'] == $admin_array['r3']){
	$user3 = 1;
	}
else {
$user3 = 0;
	}  
if ($user_array['r401'] == $admin_array['r4'] or $user_array['r402'] == $admin_array['r4'] or $user_array['r403'] == $admin_array['r4']){
	$user4 = 1;
	}
else {
$user4 = 0;
	}  
if ($user_array['r501'] == $admin_array['r5'] or $user_array['r502'] == $admin_array['r5'] or $user_array['r503'] == $admin_array['r5']){
	$user5 = 1;
	}
else {
$user5 = 0;
	}  
if ($user_array['r601'] == $admin_array['r6'] or $user_array['r602'] == $admin_array['r6'] or $user_array['r603'] == $admin_array['r6']){
	$user6 = 1;
	}
else {
$user6 = 0;
	}  
if ($user_array['r701'] == $admin_array['r7'] or $user_array['r702'] == $admin_array['r7'] or $user_array['r703'] == $admin_array['r7']){
	$user7 = 1;
	}
else {
$user7 = 0;
	}  
if ($user_array['r801'] == $admin_array['r8'] or $user_array['r802'] == $admin_array['r8'] or $user_array['r803'] == $admin_array['r8']){
	$user8 = 1;
	}
else {
$user8 = 0;
	}  
if ($user_array['r901'] == $admin_array['r9'] or $user_array['r902'] == $admin_array['r9'] or $user_array['r903'] == $admin_array['r9']){
	$user9 = 1;
	}
else {
$user9 = 0;
	}  
if ($user_array['r1001'] == $admin_array['r10'] or $user_array['r1002'] == $admin_array['r10'] or $user_array['r1003'] == $admin_array['r10']){
	$user10 = 1;
	}
else {
$user10 = 0;
	}  
if ($user_array['r1101'] == $admin_array['r11'] or $user_array['r1102'] == $admin_array['r11'] or $user_array['r1103'] == $admin_array['r11']){
	$user11 = 1;
	}
else {
$user11 = 0;
	}  
if ($user_array['r1201'] == $admin_array['r12'] or $user_array['r1202'] == $admin_array['r12'] or $user_array['r1203'] == $admin_array['r12']){
	$user12 = 1;
	}
else {
$user12 = 0;
	}  
if ($user_array['r1301'] == $admin_array['r13'] or $user_array['r1302'] == $admin_array['r13'] or $user_array['r1303'] == $admin_array['r13']){
	$user13 = 1;
	}
else {
$user13 = 0;
	}  
	
                                
                   
?>

För att via resultatet har jag gjort en enken

echo $user1 + $user2 + $user3 + $user4 + $user5 + $user6 + $user7 + $user8 + $user9 + $user10 + $user11 + $user12 + $user13;

Sedan har jag infogat veckans resultatet i sql databasen.
och hämtat värdena med summeringen igen.

    $select_radw1 = mysql_query("SELECT * FROM ismw WHERE id='1'") or die(mysql_error());
    $select_radw11 = mysql_query("SELECT * FROM tipsw WHERE id='1' AND week='1'") or die(mysql_error());
    $select_radw12 = mysql_query("SELECT * FROM tipaw WHERE id='1' AND week='2'") or die(mysql_error());
    $select_radw13 = mysql_query("SELECT * FROM tipsw WHERE id='1' AND week='3'") or die(mysql_error());
    $select_radw14 = mysql_query("SELECT * FROM tipsw WHERE id='1' AND week='4'") or die(mysql_error());
    $select_radw15 = mysql_query("SELECT * FROM tipsw WHERE id='1' AND week='5'") or die(mysql_error());
    $select_radw16 = mysql_query("SELECT * FROM tipsw WHERE id='1' AND week='6'") or die(mysql_error());
    $select_radw17 = mysql_query("SELECT * FROM tipsw WHERE id='1' AND week='7'") or die(mysql_error());
    $select_radw18 = mysql_query("SELECT * FROM tipsw WHERE id='1' AND week='8'") or die(mysql_error());
    $select_radw19 = mysql_query("SELECT * FROM tipsw WHERE id='1' AND week='9'") or die(mysql_error());
    $select_radw10 = mysql_query("SELECT * FROM tipsw WHERE id='1' AND week='10'") or die(mysql_error());
<table id="sorttable">
<thead>
   <tr>
      <td>
<? echo "$anv_radw1[user]"; ?>
      </td>
      <td><center>
<? echo "$anv_radw11[summa]"; ?>    
     </center></td>
      <td>
<? echo "$anv_radw12[summa]"; ?> 
      </td>
      <td>
<? echo "$anv_radw13[summa]"; ?> 
      </td>
      <td>
<? echo "$anv_radw14[summa]"; ?> 
      </td>
      <td>
<? echo "$anv_radw15[summa]"; ?> 
      </td>
      <td>
<? echo "$anv_radw16[summa]"; ?> 
      </td>
      <td>
<? echo "$anv_radw17[summa]"; ?> 
      </td>
      <td>
<? echo "$anv_radw18[summa]"; ?> 
      </td>
      <td>
<? echo "$anv_radw19[summa]"; ?> 
      </td>
      <td>
<? echo "$anv_radw10[summa]"; ?> 
      </td>
      <td>
<? echo $anv_radw11[summa] + $anv_radw12[summa] + $anv_radw13[summa] + $anv_radw14[summa] + $anv_radw15[summa] + $anv_radw16[summa] + $anv_radw17[summa] + $anv_radw18[summa] + $anv_radw19[summa] + $anv_radw10[summa] ; ?>
      </td>
   </tr>

Nu är saken att jag vill att endast 8 veckor räknas. Med andra ord så ska de 2 lägsta tas bort.
Hoppas det hjälpte dig att förstå vad jag är ute efter.
//stefan

Medlem sedan mars 20034 471 inlägg
#4

För att komma någon vart alls i programmering/scriptning måste man lära sig sådana styrstrukturer som slingor och loopar. Den kod du visar, där värden hårdkodas, ett i taget, för 13 användare och x rader är... i princip inte framkomlig. Säg att du vill ändra på något någonstans eller lägga till 5 användare? Du får en massa - egentligen identiska - kodrader att ändra. Och den fråga du ställer, hur ta bort de två lägsta värdena blir omöjlig att lösa så länge du inte kan hantera flera värden i samma kodslinga.

Om du däremot sätter dig in i slingor och loopar kan du dels skriva om den kod du nu har till avsevärt färre rader och dessutom enkelt lösa problemet med att ta bort de två sämsta raderna, genom att hela tiden i loopen hålla reda på vilka dessa är, och sedan skriva ut alla andra.

Rekommenderar en lärobok i PHP eller t.ex. Slingor i PHP till att börja med. :)

Medlem sedan maj 20113 inlägg
#5

Tack för ditt svar!
Jag är som sagt ny när det gäller php/sql så all hjälp man kan få är jag enormt tacksam för!

Har även gjort om summeringen så den hämtar den totala summan av samtliga användare utan att behöva koda om efter antal användare:

$summering = "SELECT SUM(summa) AS sum_points FROM `ismw` GROUP BY id DESC ";
$resulttot = mysql_query($summering) or die(mysql_error());   

while($tot = mysql_fetch_array($resulttot)){
  echo "<tr>";                              
  echo "<td>" . $tot['sum_points'] . "</td>";  
}

Men jag sitter fortfarande fast på hur jag ska ta bort de 2 lägsta värdena.
Hoppas det vart lite trevligare att se dessa koder..

//Stefan

Medlem sedan juni 20115 inlägg
#6

Plocka ut de två lägsta värdena med sql med hjälp av LIMIT. Sen subtraherar du med PHP. Det är väl inte svårare än så?

SELECT sum(val) WHERE id=2 ORDER BY time DESC LIMIT 8,2

270 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)