oare cat de inteligent trebuie sa fii?

Filed Under (fara categorie) by dexter on 22-05-2008

Recent am lucrat la un site de licitatii online. Fostul programator a facut doua functii pentru a arata care este licitatia castigata si statusul ei.
Dar sa vedem codul facut de el:
function getWinner($AUCID){
$ret = array();
$user = array();
$amount = array();

$selB = mysql_query(”SELECT AMOUNT,UID,ID FROM bids WHERE AUCID = ‘$AUCID’ ORDER BY AMOUNT ASC”);
while($resB = mysql_fetch_array($selB)){
array_push($amount,$resB[AMOUNT]);
array_push($user,$resB[ID]);
}
$j = 1;
$k = 2;
$remains = array();
$winner = array();
for($i = 0 ; $i < count($amount) ; $i++){
$first = $amount[$i];
$second = $amount[$j];
$third = $amount[$k];

if($first == $second){
array_shift($amount);
array_shift($user);

if($third == $second){
array_shift($amount);
array_shift($user);
}
}else{
array_push($remains,$amount[$i]);
array_push($winner,$user[$i]);
}
$j = $j+1;
$k = $k+1;
}

$minUnique = $remains[0];
$win = $winner[0];

if($minUnique && $win){
array_push($ret , $minUnique);
array_push($ret , $win);
}else{
$selMin = mysql_query(”SELECT MIN(AMOUNT) AS MINAMOUNT,ID FROM bids WHERE AUCID = ‘$AUCID’ GROUP BY AMOUNT,DATE”);
echo mysql_error();
$resMin = mysql_fetch_array($selMin);
array_push($ret , $resMin[MINAMOUNT]);
array_push($ret , $resMin[ID]);
}
return $ret;
}

function getStatus($bidID){
$ret = “UNIQUE BUT NOT LOWEST”;
$sel = mysql_query(”SELECT AUCID FROM bids WHERE ID = ‘$bidID’”);
$res = mysql_fetch_array($sel);

$AUCID = $res[AUCID];

$arr = getWinner($AUCID);
$bidid = $arr[1];
//echo $bidid. ” = ” . $bidID.”<br />”;
if($bidid == $bidID){
$ret = “WINNING BID”;
}else{

$selMin = mysql_query(”SELECT ID,AMOUNT FROM bids WHERE AUCID = ‘$AUCID’ ORDER BY AMOUNT ASC”);
$resMin = mysql_fetch_array($selMin);

$bidid1 = $resMin[ID];
if($bidid1 == $bidID){
$ret = “LOWEST BUT DUPLICATE”;
}
}
return $ret;
}

Dar care este varianta mea?

function getWinner($AUCID){
$ret = array();
$user = array();
$amount = array();

$selB = mysql_query(”SELECT AMOUNT,UID,ID,COUNT(ID) AS a FROM bids WHERE AUCID = ‘$AUCID’ GROUP BY AMOUNT HAVING COUNT(ID)=1 ORDER BY AMOUNT ASC LIMIT 0,1″);
while($resB = mysql_fetch_array($selB)){
return $resB;
}
}

function getStatus($bidID){
$ret = “DUPLICATE”;
$sel = mysql_query(”SELECT AUCID,AMOUNT FROM bids WHERE ID = ‘$bidID’”);
$res = mysql_fetch_array($sel);

$AUCID = $res[AUCID];

$arr = getWinner($AUCID);
$bidid = $arr[2];
//echo $bidid. ” = ” . $bidID.”<br />”;
if($bidid == $bidID){
$ret = “WINNING BID”;
}else{
if($arr[0] > $res[1])
{
$ret = “DUPLICATE”;
}
else
{
$query = “SELECT ID FROM bids WHERE AMOUNT=’”.$res[1].”‘ AND AUCID=’”.$res[0].”‘ AND ID!=’”.$bidID.”‘”;
$temp = mysql_query($query) or die(mysql_error());
if(mysql_num_rows($temp)== 0)
{
$ret= ‘UNIQUE BUT NOT LOWEST’;
}
else
{
//$ret = mysql_num_rows($temp);
}
}
}
//echo $ret;
return $ret;
}

Ce trebuie sa faci? Invata SQL. NU fa scripturi care nu le gandesti ci invata cea mai simpla si eficienta solutie!