Ergebnis 1 bis 4 von 4

SQL Expertenfrage ... ´gewichtetes Mittel´

Erstellt von Ralf_aus_Do, 11.02.2007, 10:48 Uhr · 3 Antworten · 1.126 Aufrufe

  1. #1
    Avatar von Ralf_aus_Do

    Registriert seit
    11.01.2005
    Beiträge
    3.787

    SQL Expertenfrage ... ´gewichtetes Mittel´

    Ich habe gerade eine Abfrage erstellt, die ich gerne noch erweitern möchte

    Code:
    SELECT `beau_pics`.`pic_url` , `beau_user`.`user` , IF(COUNT(`beau_votes`.`vote`)=0,7,(SUM(`beau_votes`.`vote`)/COUNT(`beau_votes`.`vote`))) AS votes FROM `beau_pics` LEFT JOIN `beau_user` ON `beau_pics`.`user_ID`=`beau_user`.`ID` LEFT OUTER JOIN `beau_votes` ON `beau_pics`.`pic_ID`=`beau_votes`.`pic_ID` GROUP BY `beau_pics`.`pic_ID` ORDER BY `beau_pics`.`pic_ID`
    Jetzt schmeißt mir ´votes´ ja einen ´Durchschnittswert raus (und wenn noch nix drinnesteht halt ´ne 7 ... ich möchte aber noch etwas anderes.

    In der Tabelle beau_user gibt es noch eine Spalte ´factor´ in der festgehalten ist mit welcher Wichtung ´Stimmen´ eingehen (Konkret 1, 2 oder 5 fach). Wie ist die Abfragespalte zu modifizieren, damit der solchermaßen gewichtete Durchschnitt rauskommt?

    nun

    Code:
    ... SUM(`beau_votes`.`vote`*`beau_user`.`factor`)/ ...
    sollte es anfangen, nur wie bekomme ich den richtigen ´Divisor´ ... also das wodurch geteilt wird hin?

    Ich weiß, daß ich das vor etwa zwei Jahren mal gemacht hatte, aktuell hab ich aber ´nen Brett vor´m Schädel :schuettel:


  2.  
    Anzeige
  3. #2
    Avatar von Ralf_aus_Do

    Registriert seit
    11.01.2005
    Beiträge
    3.787

    Re: SQL Expertenfrage ... ´gewichtetes Mittel´

    War es die Erleuchtung?

    Code:
    SELECT `beau_pics`.`pic_ID` ,`beau_pics`.`pic_url` , `beau_pics`.`titel` , `beau_user`.`user` , IF(COUNT(`beau_votes`.`vote`)=0,7,(SUM(`beau_votes`.`vote`)/SUM(ISNULL(`beau_votes`.`vote`)*`beau_user`.`factor`))) AS votes FROM `beau_pics` LEFT JOIN `beau_user` ON `beau_pics`.`user_ID`=`beau_user`.`ID` AND `beau_pics`.`klasse` = 1 LEFT OUTER JOIN `beau_votes` ON `beau_pics`.`pic_ID`=`beau_votes`.`pic_ID` GROUP BY `beau_pics`.`pic_ID` ORDER BY `beau_pics`.`pic_ID`

  4. #3
    Avatar von Claude

    Registriert seit
    24.08.2003
    Beiträge
    2.292

    Re: SQL Expertenfrage ... ´gewichtetes Mittel´

    Also ich hätte die abgegebenen Punkte erstmal mit dem Wichtungsfaktor aktualisiert, damit die entscheidende SQL-Abfrage klarer bleibt.
    Frage: Mit welchem Programm arbeitest Du?

  5. #4
    Avatar von Ralf_aus_Do

    Registriert seit
    11.01.2005
    Beiträge
    3.787

    Re: SQL Expertenfrage ... ´gewichtetes Mittel´

    Ich schreibe in PHP ... die Abfrage geht an 'ne MySQL Datenbank und wurde my MyAdmin getestet ... das Problem ist, daß der gesamte Quelltext wenn ich wie hier geschehen hektisch zu tippen anfange eher unkoordiniert und chaotisch aussehen tut ... die Where Klausel hab ich im übrigen weggelassen, stattdessen spoole ich aktuell mit 'while' ... ich weiß ... ehlendige Hobbyisten in PHP ... heute abend gehts Online. Der Quelltext sieht aktuell wie folgt aus (und ich hoffe daß dies die Darstellung hier nicht zusehr durcheinanderwirbelt)

    Code:
    <?php
    session_start();
    ?>
    <html>
    <head>
    <title>Nittaya Beauty 2007</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <link href="mainstyle.css" rel="stylesheet" type="text/css">
    </head>
    <body>
    <div class="maindiv">
      <?php
      	$testrunnings=0;
    $nextselect= "SELECT `ID` , `user` , `factor` , `rights`  FROM `beau_user` WHERE `usecode` = '$memcode' ";
    $db = mysql_connect("localhost","xxxxxxxxx","xxxxx");
    mysql_select_db("ralfausdo_de_db",$db);
    $result=mysql_query($nextselect,$db);
    if (mysql_affected_rows()==1){
    	$daten=mysql_fetch_row($result);
    	if(($action >= 21)and($action <= 24)){
    		$contcode=$action-20;
    		$action=$action-10;
    		$insselect= "INSERT INTO beau_pics (user_ID,klasse,pic_url,titel) VALUES($daten[0],$contcode,'$bildurl','$bildtext')"; 
    		$insresult=mysql_query($insselect,$db);
    		$picID=mysql_insert_id($insresult);
    	}
    	else{
    		$contcode=$action-10;
    	}
    	$picselect="SELECT `beau_pics`.`pic_ID` ,`beau_pics`.`pic_url` , `beau_pics`.`titel` , `beau_user`.`user` , IF(COUNT(`beau_votes`.`vote`)=0,7,(SUM(`beau_votes`.`vote`)/SUM(ISNULL(`beau_votes`.`vote`)*`beau_user`.`factor`))) AS votes , `beau_pics`.`klasse` FROM `beau_pics` LEFT JOIN `beau_user` ON `beau_pics`.`user_ID`=`beau_user`.`ID` LEFT OUTER JOIN `beau_votes` ON `beau_pics`.`pic_ID`=`beau_votes`.`pic_ID` GROUP BY `beau_pics`.`pic_ID` ORDER BY `beau_pics`.`pic_ID`";
    	$picresult=mysql_query($picselect,$db);
    	$arraytrick=1;
    	$firstRun=0;
    	$lastRun=0;
    	while ($pic_row = mysql_fetch_row($picresult)) {
    		if($contcode==$pic_row[5]){
    			if(($pic_row[0]==$picID)or(!isset($picID))){
    				$firstRun=1;
    				$lastRun=2;
    				$arraytrick=3;
    				$picID=$pic_row[0];
    			}	
    			$res_pic_ID[$arraytrick]=$pic_row[0];
    			$res_pic_url[$arraytrick]=$pic_row[1];
    			$res_pic_user[$arraytrick]=$pic_row[3];
    			$res_pic_titel[$arraytrick]=$pic_row[2];
    			$res_pic_note[$arraytrick]=$pic_row[4];
    			if($firstRun==0){
    			$firstRun=1;
    			$arraytrick=$arraytrick+1;
    			$first="firstDurch";
    		}
    		if($lastRun!=0){
    			$lastRun=$lastRun-1;
    			$arraytrick=$arraytrick+1;
    			$last="lastDurch";
    		}
    		}
    	}
    	session_register("daten");
    	session_register("memcode");	
    	?>
      DeutschEnglish 
      <h1><span class="h1spanl">Nittaya Beauty</span><span class="h1spanr">Contest 2007</span></h1>
      Home
      Abstimmen
      <?php if($action!=11){
      echo "<a target='_self'  class='MenB' href='pic.php?action=11' style='top: 64px;'>";
      } 
      else{
      echo "<a target='_self'  class='MenB' href='#' style='top: 64px; text-decoration: underline overline;'>";
      }?>Miss</a>
      <?php if($action!=12){
      echo "<a target='_self'  class='MenB' href='pic.php?action=12' style='top: 83px;'>";
      }
      else{
      echo "<a target='_self'  class='MenB' href='#' style='top: 83px; text-decoration: underline overline;'>";
      }?>Mister</a>
      <?php if($action!=13){
      echo "<a target='_self'  class='MenB' href='pic.php?action=13' style='top: 102px;'>";
      }
      else {echo "<a target='_self'  class='MenB' href='#' style='top: 102px; text-decoration: underline overline;'>";
      }?>Kind</a>
      <?php if($action!=14)
      {echo "<a target='_self'  class='MenB' href='pic.php?action=14' style='top: 121px;'>";
      }
      else{echo "<a target='_self'  class='MenB' href='#' style='top: 121px; text-decoration: underline overline;'>";
      }
      ?>Baby</a>
      Vorschlagen
      <?php if($action!=21){
      echo "<a target='_self'  class='MenB' href='pro.php?action=21' style='top: 161px;'>";
      }
      else{
      echo "<a target='_self'  class='MenB' href='#' style='top: 161px; text-decoration: underline overline;'>";
      }?>Miss</a>
      <?php if($action!=22){
      echo "<a target='_self'  class='MenB' href='pro.php?action=22' style='top: 180px;'>";
      }
      else{
      echo "<a target='_self'  class='MenB' href='#' style='top: 180px; text-decoration: underline overline;'>";
      }?>Mister</a>
      <?php if($action!=23){
      echo "<a target='_self'  class='MenB' href='pro.php?action=23' style='top: 199px;'>";
      }
      else{
      echo "<a target='_self'  class='MenB' href='#' style='top: 199px; text-decoration: underline overline;'>";
      }?>Kind</a>
      <?php if($action!=24){
      echo "<a target='_self'  class='MenB' href='pro.php?action=24' style='top: 218px;'>";
      }
      else{
      echo "<a target='_self'  class='MenB' href='#' style='top: 218px; text-decoration: underline overline'>";
      }?>Baby</a>
       Spielregeln
      <span class="MenB" style="top: 258px;"> </span>
      <?php
      if ($daten[3]==9){
      	echo "Teilnehmer neu";
    	 }
      else{
     	echo "<span class='MenA' style='top: 277px;'> </span>";
      }
      ?>
      <span class='MenA' style='top: 298px; height: 160px;'> </span>
      Gästebuch
      Logout
      <div class="textdiv">
      <h3>Vorschlag von 
      <?php echo $res_pic_user[3];  ?>
      </h3>
      
    
    
      <?php echo $res_pic_titel[3]; ?>
      
    
    <img src="
        <?php echo $res_pic_url[3]; ?>
      " onload="javascript:if(this.width > 320){ this.height = Math.round((320/this.width)*this.height); this.width=320;} if(this.height > 320){ this.width = Math.round((320/this.height)*this.width); this.height=320;}">
    <?php
    if(!isset($res_pic_ID[5])){
    	$res_pic_ID[5]=$res_pic_ID[4];
    }	
    if(!isset($res_pic_ID[2])){
    	$res_pic_ID[2]=$res_pic_ID[1];
    }	
    ?>
    <?php
    if(isset($res_pic_ID[1])){
    ?>
    |<<
    <?php
    }
    if(isset($res_pic_ID[2])){
    ?>
    <
    <?php
    }
    if(isset($res_pic_ID[4])){
    ?>
    >
    <?php
    }
    if(isset($res_pic_ID[5])){
    ?>
    >>|
    <?php
    } ?>
    <form action='pic.php?picID=<?php echo $res_pic_ID[3]; ?>&action=<?php echo $action; ?>' method="post">
    <span class="inputOptText" style="top: 15px; width:70px; left:400px; font-weight:700; ">Abstimmen</span> 
        <input type="radio" name="myVote" value="1" class="inputOpt">
        <span class="inputOptText">1 - Top</span> 
    <input type="radio" name="myVote" value="2" class="inputOpt" style="top:45px;"><span class="inputOptText" style="top:45px;">2</span>
    <input type="radio" name="myVote" value="3" class="inputOpt" style="top:60px;"><span class="inputOptText" style="top:60px;">3</span>
    <input type="radio" name="myVote" value="4" class="inputOpt" style="top:75px;"><span class="inputOptText" style="top:75px;">4</span>
    <input type="radio" name="myVote" value="5" class="inputOpt" style="top:90px;"><span class="inputOptText" style="top:90px;">5</span>
    <input type="radio" name="myVote" value="6" class="inputOpt" style="top:105px;"><span class="inputOptText" style="top:105px;">6 - Flop</span>
    <input type="submit" class="submitVote" value="Vote">
    </form>
    <?php
    }
    else {
    	echo '<h3>Sie sind kein berechtigter Benutzer Dieser Seite ... frag nach der Berechtigung</h3>';
    	echo '<h3>You are not allowed to use this site ... ask for allowance</h3>';
    }
    ?>
    </p>
    </div>
    </div>
    </body>
    </html>
    Achso, dat Javascript zum Verkleinern der Bilder hab ich aus'm Nitty geklaut

Ähnliche Themen

  1. Malaria-Mittel erzeugt Antibiotika-Resistenzen
    Von Hippo im Forum Sonstiges
    Antworten: 1
    Letzter Beitrag: 17.07.08, 09:13
  2. Mittel gegen Sandfliegen!
    Von dorota im Forum Touristik
    Antworten: 5
    Letzter Beitrag: 14.01.07, 22:50