Avatar billede mjl Nybegynder
30. maj 2011 - 17:40 Der er 21 kommentarer og
1 løsning

Sidste 3 records med samme nummer ...

Hej der ...

Hvordan finder jeg de sidste 3 records for hvert id?

I min database samles hver dag nogle records, der kan have samme "r_nr" - men jeg skal kun bruge de sidste 3 records - men fra hvert eneste "r_nr" mellem 3000 og 5999 ...

Hvordan henter jeg det?

VH Martin
Avatar billede mjl Nybegynder
30. maj 2011 - 19:14 #1
Nogen der kan hjælpe?
30. maj 2011 - 20:33 #2
Hvordan ved du hvilke records der er de første og hvilke er de sidste?  Gemmer du en date-time for hver record, eller giver du dem løbenumre, eller hvad?
Avatar billede mjl Nybegynder
30. maj 2011 - 20:42 #3
Ja, jeg har et felt der hedder dato, der skal sorteres efter!
Avatar billede mjl Nybegynder
30. maj 2011 - 20:43 #4
Ja, jeg har et felt der hedder dato, jeg sorterer efter ...
30. maj 2011 - 21:25 #5
Du er ikke særlig meddelsom.  Eller er det mig der er usædvanlig tumpet?  Hvis du for hvert r_nr hver dag har adskillige records, så kan jeg ikke se hvordan du kan kende forskel på disse records ved hjælp af et dato felt.  Er det i virkeligheden et dato-tids felt?  Eller er der et eller andet nøglefelt i tabellen med fortløbende nummerering af alle records?
Avatar billede mjl Nybegynder
30. maj 2011 - 21:35 #6
Alle records har et unikt "id"

Hver record har en time() der hedder "dato"

Alle records har et "r_nr" der kan være ens på flere records - jeg skal bruge de sidste tre af hver "r_nr" ud fra datoen ...

"ORDER BY dato DESC LIMIT 3" eller noget i den retning !

id / dato / r_nr
1 / 1234567890 / 3320
2 / 1234567900 / 3320
3 / 1234567940 / 4012
4 / 1234567890 / 3320
5 / 1234567890 / 5260
Avatar billede showsource Seniormester
30. maj 2011 - 22:44 #7
SELECT * FROM tabel GROUP BY r_nr ORDER BY dato DESC LIMIT 0,3
utestet.......
Avatar billede arne_v Ekspert
31. maj 2011 - 04:39 #8
proev med:

SELECT *
FROM tabel t1
WHERE (SELECT COUNT(*) FROM tabel t2 WHERE t2.r_nr=t1.r_nr AND t2.dato < t1.dato) < 3
ORDER BY r_nr ASC,dato DESC
Avatar billede mjl Nybegynder
31. maj 2011 - 06:07 #9
100 % perfekt, arne_v - 1000 tak ... ! Smid endelig et svar !!
31. maj 2011 - 07:45 #10
Jeg nåede så ikke at komme tilbage.  Det der forvirrede mig var, at du i dit oprindelige indlæg søgte efter sidste 3 indlæg for hver id.  Du mente noget andet, og hvert indlæg har (som man forventer i en relational database) sit eget id.
Avatar billede arne_v Ekspert
31. maj 2011 - 14:37 #11
svar
Avatar billede mjl Nybegynder
31. maj 2011 - 17:19 #12
Christian_Belgien : Ked af at jeg forvirrede dig ...

arne_v : tak igen !
Avatar billede mjl Nybegynder
31. maj 2011 - 18:13 #13
... hvis ikke det er for meget forlangt, så har jeg et lille tillægsspørgsmål :o)

Jeg henter data ved hjælp af PHP/HTML, og har smidt resultatet ud i en <table> hvor hvert resultat får en linie <tr> .... men er der en måde, hvor jeg kan lave en adskillelse mellem hver gang r_nr er ens ... ?

R3016 28.04.2011
R3016 27.04.2011
--- 
R3017 17.03.2011
---
R3020 30.05.2011
R3020 07.04.2011
R3020 10.05.2010
---
R3025 12.05.2011
R3025 12.05.2011
---
R3028 02.03.2011 
R3028 21.06.2010


hilsen Martin
Avatar billede arne_v Ekspert
31. maj 2011 - 18:24 #14
Ja. Tester paa om v aerdien er den samme som sidst.

Noget a la:

$last_r = '-';
while($row = mysql_fetch_array($sql)) {
    if($row['r'] == $last_r) {
        // samme
    } else {
        // ikke samme
        $last_r = $row['r'];
    }
}
Avatar billede mjl Nybegynder
31. maj 2011 - 19:10 #15
Tak skal du ha ... men den returnerer altså ikke noget ?
Avatar billede mjl Nybegynder
31. maj 2011 - 19:15 #16
Eller, den skiller sådan her?

R3016 28.04.2011 
- 27.04.2011 
R3017 17.03.2011 
R3020 30.05.2011 
- 07.04.2011 
R3020 10.05.2010 
R3025 12.05.2011 
- 12.05.2011 
R3028 02.03.2011 
- 21.06.2010 
R3040 04.05.2011 
- 24.06.2010 
R3046 27.04.2011
Avatar billede mjl Nybegynder
31. maj 2011 - 20:56 #17
Men som sagt; tak ... jeg har fået noget at arbejde videre med !!
Avatar billede arne_v Ekspert
01. juni 2011 - 02:42 #18
Ovenstaaende kode er jo bare maaden at skelne mellem om det er samme r nummer eller et nyt - layoutet skal du selv styre.
Avatar billede mjl Nybegynder
01. juni 2011 - 06:07 #19
Ja, ok ...

Jeg forstår nook bare ikke helt metoden !

$last_r = '-';
while($row = mysql_fetch_array($sql)) {
    if($row['r'] == $last_r) { [Det vil den vel aldrig være?]
        // samme
    } else {
        // ikke samme
        $last_r = $row['r']; [Dette vil den vel hele tiden være, eller?]
    }
}
Avatar billede arne_v Ekspert
05. juni 2011 - 04:24 #20
[Det vil den vel aldrig være?]

jo - hvis foregaaende raekke havde samme vaerdi i r feltet

[Dette vil den vel hele tiden være, eller?]

det er ikke et test men en tildeling
Avatar billede arne_v Ekspert
05. juni 2011 - 04:28 #21
Eks. paa layout:

$last_r = '-';
while($row = mysql_fetch_array($sql)) {
    if($row['r'] == $last_r) {
        echo ' --- ' . $row['d'];
    } else {
        echo $row['r'] . ' ' . $row['d'];
        $last_r = $row['r'];
    }
}
Avatar billede mjl Nybegynder
05. juni 2011 - 09:41 #22
Åhh ja, sorry ! Og endnu mere tak !!!!!
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