Avatar billede zac Nybegynder
03. december 2005 - 23:01 Der er 12 kommentarer og
1 løsning

Hvordan få MIN og MAX værdier mht. en variabel? MIN og MAX ej ok?

Jeg henter nogle data ud fra tabel afsnit:
            $result = mysql_query( "SELECT f.afsnitId, f.afsSortNr, f.afsTitel, f.afsSammenfatning, DATE_FORMAT(f.relevansDato, '%e.%c.%Y') AS date1, f.afsTekst1, f.billedId, f.figurId, f.afsTekst2, f.afsKonklusion, DATE_FORMAT(f.afsCreated, '%e.%c.%Y') AS date2, DATE_FORMAT(f.afsModified, '%e.%c.%Y') AS date3
            FROM
            afsnit AS f
            WHERE
            f.artikelId = '$nyArtikelId'
            ORDER BY f.afsSortNr
            ");

Variablen $afsSortNr - sorteringsnr. for afsnit - bruges til at bestemme rækkefølgen for visningen.

Nu har jeg også brug for at få mindste og største nr. ud som en variabel.
Men man kan ikke indsætte fx denne er i select'en:
MIN(f.afsSortNr) AS min, MAX(f.afsSortNr) AS max
Hvorfor ikke?
Og hvordan få fat i MIN og MAX værdierne mht. $afsSortNr?
Avatar billede arne_v Ekspert
03. december 2005 - 23:14 #1
MIN(f.afsSortNr) AS sortnrmin, MAX(f.afsSortNr) AS sortnrmax
Avatar billede zac Nybegynder
03. december 2005 - 23:32 #2
Beklager - den går heller ikke. Skriptet afbrydes, når det kommer til select'en, men der kommer ikke som før en fejlmeddelse (så måske alligevel lidt fremgang!).
Avatar billede arne_v Ekspert
03. december 2005 - 23:55 #3
og du henter ud med $row['sortnrmin'] etc. ?
Avatar billede zac Nybegynder
04. december 2005 - 00:01 #4
ja
Avatar billede zac Nybegynder
04. december 2005 - 00:02 #5
mystisk, men nu er det ved at være sovetid, en ny dag giver måske mere friske øjne :-)
Avatar billede Slettet bruger
04. december 2005 - 08:34 #6
Du kan ikke have min og max funktioner i en select uden en group by
Avatar billede arne_v Ekspert
04. december 2005 - 17:03 #7
det mener jeg nu nok, men man får kun 1 row tilbage
Avatar billede zac Nybegynder
04. december 2005 - 21:55 #8
jeg har set et par steder, at min og max i hvert fald der kun bruges med group by (og jeg kan ikke gennemskue, om group by vil forstyrre det existerende, arbejder lige nu på en anden vej frem...)
Avatar billede Slettet bruger
05. december 2005 - 06:32 #9
Sagen er at du kun kan bruger min og max (eller andre aggregate funktioner) sammen med group by, hvis du skal have data som ikke "sendes igennem" en aggregate funktioner. Det vil sige hvis alle select indeholder aggregate funktioner behøver man ikke en group by:

Eks,

select min(tal), max(tal) from tabel

er fint nok, men

select navn, min(tal), max(tal) from tabel

kan man ikke unden en group by, så som

select navn, min(tal), max(tal) from tabel group by navn
Avatar billede arne_v Ekspert
05. december 2005 - 10:25 #10
i standard SQL

MySQL tillader ikke-aggregerede funktioner i select listen som ikke er
i group by

MySQL tager bare en tilfældig værdi for dem

det er yderst sjældent at det er hvad man vil, men det giver ikke syntax fejl
Avatar billede zac Nybegynder
07. december 2005 - 16:12 #11
->arne v: Tak for inf.
Det er slet ikke så let at få talt eller få min. eller max. antal.
Jeg har brugt din første kommentar/ forslag, men inden i den opr. while - ved ikke, om det kan gøres mere elegant, men det virker...

                    $result5 = mysql_query( "SELECT MAX(afsSortNr) AS maxNum, MIN(afsSortNr) AS minNum
                    FROM
                    afsnit
                    WHERE $artikelId = '$artikelId'
                    ");           
                       
                    while ($row5 = mysql_fetch_array($result5))
                    {           
                            $maxNum                  = $row5["maxNum"];
                            $minNum                  = $row5["minNum"];                   
                    }
Points?
Avatar billede zac Nybegynder
07. december 2005 - 16:13 #12
Ja, der skulle vel egentlig stå "men MED NY SELECT inden i den opr. while".
Avatar billede zac Nybegynder
05. januar 2006 - 17:21 #13
lukker...
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
Computerworld tilbyder specialiserede kurser i database-management

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