/ Forside/ Teknologi / Udvikling / PHP / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
sortering af data fra database
Fra : netper
Vist : 488 gange
300 point
Dato : 15-07-02 13:12

hejsa, så er jeg her igen, denne gang ville jeg prøve at sortere af en række tal i faldende orden

tidliger har jeg brugt denne streng
$db->query("select id,navn,visningerny FROM dyrdel where visningerny>0 order by visningerny DESC LIMIT 0, 10 ");

men nu har jeg lavet en udregning som jeg gerne vil have sorteret efter i stedet
$procent=round((($visningerny) *100)/$antal);


det jeg er kommet frem til lige nu er dette
usort ($procent [" 0, 50"]) ;

men der får jeg denne meddelelse
Warning: Cannot use a scalar value as an array in /usr/local/psa/home/vhosts/dk-kogebogen.dk/httpdocs/mestvist-dyrdel-ny.php on line 72

Warning: Wrong parameter count for usort() in /usr/local/psa/home/vhosts/dk-kogebogen.dk/httpdocs/mestvist-dyrdel-ny.php on line 72


er der nogen der kan hjælpe mig ??



 
 
Kommentar
Fra : strarup


Dato : 15-07-02 13:48

Hej Per,

er en af disse codestumper så fra "line 72" og hvis ja... hvilken en af dem?

mvh.

Strarup

Kommentar
Fra : netper


Dato : 15-07-02 13:52

starup

usort ($procent [" 0, 50"]) ; er fra linie 72

og (order by visningerny DESC LIMIT 0, 10) bliver slettet i den øverste linie

du kan se siden her
http://www.dk-kogebogen.dk/mestvist-dyrdel-ny.php

per

Kommentar
Fra : strarup


Dato : 15-07-02 14:05

Hej igen,

Vil lige prøve at kigge på det... har været inde på siden for lidt siden da jeg ledte efter en Shawama opskrift...
men der var desværre ikke den der Chili sovs/dressing med, som de bl.a. servere nogle steder...

forresten... hvis det havde virket, hvad sku' der så ha' stået der hvor der står "Warning: Wrong parameter count for usort() in /usr/local/psa/home/vhosts/dk-kogebogen.dk/httpdocs/mestvist-dyrdel-ny.php on line 72" ?

mvh.

Strarup

Kommentar
Fra : netper


Dato : 15-07-02 15:09

hej stårup

hvis det havde virket så skulle det slet ikke have stået noget der

per

Kommentar
Fra : netper


Dato : 15-07-02 15:15

det skal se sådan her ud, bare sorteret efter procenter i stedet

http://www.dk-kogebogen.dk/mestvist-dyreart-ny.php

per

Kommentar
Fra : rabol


Dato : 16-07-02 00:35

Hvordan kan man have en visningsprocent der er over 100% )

Du kunne også lade mysql ordne dit lille problem...

Jeg bruger lige din første query som eks. + at jeg forventer at du har et felt der indeholder antallet af visninger

$sql = "select id,navn,visningerny, round(((dyrdel.visningerny * 100) / visningerny.antal),2) as pct FROM dyrdel where visningerny>0 order by pct LIMIT 0, 10";

Noget i den stil skulle klare det.

Mvh
Steen






Kommentar
Fra : netper


Dato : 16-07-02 01:18

Hej steen

Jeg vil lige starte her med at fortælle at jeg ikke ved ret meget om programereing og slet ikke php, det er en kamerart der har lavet det meste af programeringen til mig, og jeg har så selv siden rettet nogle småting til.

Denne kamerart har meget travlt og syntes også at jeg selv skal lære lidt mere så han er ikke meget for at hjælpe lig pt så derfor prøver jeg denne vej, jeg har været inde på php.net og fundet koden sort, men jeg kan som skrevet ikke få den til at virker

den kode du sendte virker godt nok i sig selv men den virker bare ikke sammen med de andre koder som er $db så der kom slet ingen dataer frem.

Grunden til at der kan blive mere end 100 % er at en opskrift er vist 18 gange så derfor de 1800 %

den statistik er udelukkende til internt brug for at jeg på et senere tidspunkt kan se hvilke opskrifter der bliver brugt hvornår

jeg håber du måske kan være med til at hjælpe mig med den sort, for jeg tror at det er den jeg helst vil bruge, selvom jeg selvfølge bare gerne vil have det til at fungere

Mvh

Per Klausen

Kommentar
Fra : strarup


Dato : 16-07-02 03:07

Hej Per,

jeg undrede mig også lidt over de der procentsatser... Jeg har noget materiale omkring PHP samt MySql... hvis du er interesseret ka' du sende mig en Mail på strarup@worldonline.dk

jeg ka' umiddelbart ikke lige helt hitte ud af hva' der sku' være galt med koden på nuværende tidspunkt...

mvh.

Strarup

Kommentar
Fra : netper


Dato : 16-07-02 05:48

Det kan jo godt være at det ser lidt underligt ud, men jeg mener at det viser hvor hyppigt at en opskriftgruppe bliver vist i forhold til en anden når man tager antallet af opskrifter i den enkelte gruppe i betraktning.

eller ??

Accepteret svar
Fra : rabol

Modtaget 300 point
Dato : 16-07-02 18:10

Hej
Jeg burder nok ikke hjælpe da vi jo er konkurrenter, men....
Her er lidt mere forklaring til usort(): usort kræver en sammenligings funktion for at fungere, det er noke den første 'fejl' du har lavet

Her kommer så noget kode du kan kigge på, jeg bruger selv noget i samme stil på http://www.kostplanen.dk til at sortere indkøbslister.

-------------- Start med at klippe her -------------------
<?php
function niceprintarray($array)
{
   print "<pre>";
   print_r($array);
   print "</pre>";
}

function cmp_array($a, $b)
{
   return strcmp($a[1], $b[1]);
}

function cmp_array_1($a, $b)
{
   if( $a[0] == $b[0])
      return 0;

   return ($a[0] < $b[0]) ? -1 : 1;
}

function cmp_single_asc($a, $b)
{
   if( $a == $b)
      return 0;

   return ($a < $b) ? -1 : 1;
}

function cmp_single_desc($a, $b)
{
   if( $a == $b)
      return 0;

   return ($a > $b) ? -1 : 1;
}

Print "Usort test<br>";
$elements = array("r","u","a","z","b","c","h","x");
   
// Sorter array med 1 element
usort($elements,"cmp_single_asc");
niceprintarray($elements);

usort($elements,"cmp_single_desc");
niceprintarray($elements);
   
// Sorter array med flere element
$elements_2 = array(array(1,"r") ,array(6,"u"),array(3,"a"),array(8,"z"),array(4,"b"),array(5,"c"),array(9,"h"),array(10,"x"));

// Sammenligningens funktionen kigger på 2' (0 er det første) element og sortere efter det
usort($elements_2,"cmp_array");
niceprintarray($elements_2);

// Sammenligningens funktionen kigger på 1' (0 er det første) element og sortere efter det
usort($elements_2,"cmp_array_1");
niceprintarray($elements_2);
?>

-------------- Slut med at klippe her -------------------

Som du kan se, så er det ikke så svært, når bare man ved det...

Det du kan gøre er:
1) at lave din SQL query om til at sortere for dig
2) samle alle records op og så bruge en af metoderne i den stump kode ovenfor, nu ved jeg ikke lige hvordan din $db er defineret (ADODB, eller PEAR ?), men..

while($db_row = $db->fetchRow())
{
$record_array[] = $db_row;
}

så skal du 'bare' ændre sammenlignings metoden til at sortere på der rette element nummer.
Vær opmærksom på at du skal bruge strcmp() hvis det er strenge du vil sortere.

Mvh
Steen



Kommentar
Fra : netper


Dato : 17-07-02 00:28

Hej Steen

ja jeg kan godt se at vi er konkurenter på dette feldt, og dog aligevel med forskelige indgangsvinkler til emnet.

nå men nu har jeg sidet og stiret på de koder og jeg kan ikke hitte ud af det endnu, men jeg har ikke opgivet endnu. jeg skal blot lige have regnet ud hvordan det hænger sammen.

jeg kigger lidt vidre på det og vender tilbage senere

det undre mig blot at jeg kan sortere når jeg henter dataerne ned men ikke kan sortere en udregning, eller mange som det jo er.
jeg har faktisk spekuleret på om jeg skulle lave en udregning først og så lægge denne i databasen og så hente ned igen

nå men i hvert fald tak for hjælp indtil nu

per

Kommentar
Fra : rabol


Dato : 17-07-02 09:13

Hej

Hvis jeg skal hjælpe er jeg lige nød til at vide hvordan du henter de forskellige records, $db->fetchRow() eller ?

Lad os antage at det er en metode der hedder $db->fetchRow()
Med udgangspunkt i din første query:
$db->query("select id,navn,visningerny FROM dyrdel where visningerny>0 order by visningerny DESC LIMIT 0, 10 ");


function cmp_array_pct($a, $b)
{
   if( $a[3] == $b[3])
      return 0;

   return ($a[3] > $b[3]) ? -1 : 1;
}

$db_result = $db->query("select count(id) as cnt from dyrdel where visningerny>0");
$db_row = $db->fetchRow();

$antal = $db_row[0];

$antal indeholder nu antallet af records som er blevet vist.

$db_result = $db->query("select id,navn,visningerny FROM dyrdel where visningerny>0 order by visningerny DESC LIMIT 0, 10 ");

while($db_row = $db_result->fetchrow())
{
// Lille trick
$db_row[3] = round((($db_row[2]) *100)/$antal);
$record_array[] = $db_row;
}

// Alle records er nu i $record_array, og procenterne er i 4' element (3, da 0 er det første)
usort($record_array,"cmp_array_pct");

// Nu er de sorteret så den højeste procent kommer først

foreach($record_array as $element)
{
print "Id : " . $element[0] . " Navn : " . $element[1] . " Antal visninger : " . $element[2] . " Procenter : " . $element[3] . "<br>";
}

Ovenstående skulle vise en liste sorteret efter procenter, med de højeste procenter først.

Det er lidt svært når man ikke ved hvordan du henter data, eks. hvilken metode bruger du til at hente en record etc, eller med andre ord hvordan ser din database klasse ud ?

Mvh
Steen


Kommentar
Fra : netper


Dato : 17-07-02 11:09

jeg troede at jeg hentede det ned med
$db->query("select id,navn,visningerny FROM dyrdel where visningerny>0 ");

dataerne bliver så bagefter omformet med
$id=$db->f('id');
$navn=$db->f('navn');
$visningerny=$db->f('visningerny');
$antal=$db3->f('antal');

hvorefter jeg så kan bruge dem til at skrive ud

per


Kommentar
Fra : Nyhedsbruger


Dato : 07-08-02 11:39

netper wrote:
> hejsa, så er jeg her igen, denne gang ville jeg prøve at sortere af en
> række tal i faldende orden
>
> tidliger har jeg brugt denne streng
> $db->query("select id,navn,visningerny FROM dyrdel where visningerny>0
> order by visningerny DESC LIMIT 0, 10 ");

> men nu har jeg lavet en udregning som jeg gerne vil have sorteret efter
> i stedet
> $procent=round((($visningerny) *100)/$antal);

det forstod jeg ikke helt

> det jeg er kommet frem til lige nu er dette
> usort ($procent [" 0, 50"]) ;

når du har flere parametre til en funktion skal de adskilles med komma,
da syntaksen er: usort(array array, string cmp_function)
må det blive:
usort($procent,"0, 50");

jeg er ikke klar over om du kan bruge "0, 50" som sammenligningsfunktion
- og jeg kan ikke helt gennemskue hvad det er du vil

mvh

Jesper

--
Phønix - dansk folk-musik fra unge musikere - http://www.phonixfolk.dk


Kommentar
Fra : rabol


Dato : 07-08-02 14:22

Hej
Man skal lave en funktion der kaldes, se det indlæg jeg lavede den 17-07-02 09:13

Du har følgende muligheder
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.

Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste