Avatar billede madsens90 Praktikant
22. september 2008 - 10:04 Der er 9 kommentarer og
1 løsning

Vis række i databasen med højeste tal?

Hej Eksperter!

Okay. Det her spørgsmål var pænt svært at forklarer i titlen, så håber det er nemmere at forklarer her!

Jeg er ved at lave en statistik, hvor man i statistikken skal kunne se de 3 rækker i databasen med det højeste tal.
Der er ca. 20 rækker i databasen i alt, hvor at kolonnen med tallet er i INT format, og derfor 0, hvis intet andet er angivet.

Nu kommer mit spørgsmål:

Hvordan vælger jeg kun de 3 største tal fra databasen, hvorimod at hvis der kun er 2 tal over 0, skal den kun vælge 2, og hvis der kun er 1 tal over 0, skal den self. vælge 1 tal?

Sådan så den ikke viser en tilfældig række med tallet 0, hvis ikke der er 3 tal over 0 ?

Håber det er til at forstå!!

Mvh. Christian Madsen
Avatar billede madsens90 Praktikant
22. september 2008 - 10:06 #1
Og når jeg siger "hvordan vælger man", så snakker jeg om brug af SELECT, som denne:

$sql = "SELECT gule FROM hil_users ORDER BY `gule` DESC LIMIT 3";
Avatar billede madsens90 Praktikant
22. september 2008 - 10:13 #2
Nåår jah.. Tror jeg selv har regnet det ud nu.! :D
Først tjekker jeg vel hvor mange rækker der har et tal over 0, i kolonnen `gul`.
Sådan her:

$gule = mysql_num_rows(mysql_query("SELECT * FROM hil_users WHERE `gule` > '0'"));

if ($gule < 4){

$gule2 = $gule;

}

if ($gule > 3){

$gule2 = 3;

}

Og så derefter laver jeg min select:

$sql = "SELECT gule FROM hil_users ORDER BY `gule` DESC LIMIT '$gule2'";
Avatar billede madsens90 Praktikant
22. september 2008 - 10:14 #3
Men tak fordi i kiggede alligevel, hvis i altså gjorde. :P heh
Avatar billede pidgeot Nybegynder
22. september 2008 - 10:17 #4
...du kan jo også bare bruge:

SELECT * FROM hil_users WHERE gule > 0 LIMIT 3

Den vil aldrig returnere flere rækker end det der matcher din WHERE.

*går igen*
Avatar billede j4k0b Nybegynder
22. september 2008 - 10:18 #5
Er ikke helt sikker på at jeg forstår dit problem, men er det ikke bare noget med at gøre sådan?

SELECT gule FROM hil_users WHERE gule > 0 ORDER BY gule DESC LIMIT 3;

Så får du de 3 rækker med højeste tal, og kun rækker hvor 'gule' er over 0...
Avatar billede pidgeot Nybegynder
22. september 2008 - 10:21 #6
...og ja, der manglede lige en ORDER BY i min - j4k0b fik skrevet det rigtigt
Avatar billede madsens90 Praktikant
22. september 2008 - 10:26 #7
Jo tak! Det er helt sikkert brugbart, og meget nermmere! ;-)

Men tror jeg beholder min mysql_num_rows , for så laver jeg så den skriver en besked også hvis der ikke er nogle rækker der har et tal over 0.. :)

Men tak for jeres tid alligevel. :D Altid bedre at blive klogere!
Avatar billede showsource Seniormester
22. september 2008 - 10:54 #8
Jeg synes nu du skal bruge det forslag fra pidgeot/j4k0b

<?php
$sql = "SELECT gule FROM hil_users WHERE gule > 0 ORDER BY gule DESC LIMIT 3";
$rows = mysql_query($sql) or die (mysql_error());

    if(mysql_num_rows($rows) > 0) {
    // vis indhold
    }else{
    echo"Ingen rows fundet!";
    }

mysql_free_result($rows);

?>
Avatar billede j4k0b Nybegynder
22. september 2008 - 14:25 #9
madsens90: Forskellen på din og vores metode er antallet af forespørgsler der bliver sendt til databasen. Prøv altid at holde det til et minimum aht. performance
Avatar billede madsens90 Praktikant
22. september 2008 - 15:26 #10
Jo tak.. :-) Det skal jeg sætte mig bag øret, og showsource, skal nok prøve at lege lidt med det der. :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester