Forum » Server-Side scripting » Selecteer 5 laatste van tabellen
Rapifia Europe
Berichten: 3718
avatar
Online Stuur privebericht
Beste,

Wie weet hoe ik de 5 laatste records van 9 tabellen kan ophalen? Hier bedoel ik mee dat ik dus 5 records krijg uit 9 tabellen, op volgorde van tijd en dan niet per tabel maar dus in totaal.

Alvast erg bedankt!
14-10-2011 15:32
Dit topic is 252 keer bekeken door 44 verschillende leden
Reacties op: "Selecteer 5 laatste van tabellen"
1 | 2 Volgende pagina
Berichten: 156
avatar
Offline Stuur privébericht
Met PHP en SQL ?

Zou je de uitleg beter kunnen doen?
14-10-2011 15:36
Rapifia Europe
Berichten: 3718
avatar
Online Stuur privébericht
Ik weet niet hoe ik het precies kan uitleggen, maar stel dat ik 5 tabellen heb met hierin data. Bij die data zit een datum, en dan wil ik dus de 5 laatste results gemeten over alle tabellen hebben. Dus niet 5 per tabel ofzo.

Als het goed is moet dit alleen met MySQL kunnen, anders kost het denk ik teveel loadtime.

Hopelijk is het nu duidelijker.
14-10-2011 15:37
Vreemd
Berichten: 1246
avatar
Offline Stuur privébericht
Met PostGreSQL zou je met een functie een result set kunnen returnen. Met MySQL kan dit nog niet voor zover ik weet.
Misschien dat je genoeg hebt aan een UNION query. Maar met de info die je geeft kan ik op het moment niet veel beter doen.
We hebben bijvoorbeeld geen idee van de structuur van de 9 tabellen, of wat je nou precies verwacht als result set.

De extra load die een beetje PHP verwerking met zich mee brengt is meer, maar te veel? Dan moet die pagina wel erg druk bezocht zijn en heb je blijkbaar strenge non-functional requirements opgesteld.
14-10-2011 15:57
Rapifia Europe
Berichten: 3718
avatar
Online Stuur privébericht
De tabellen zijn beiden ongeveer hetzelfde. Ze hebben allemaal een kolom id, user en price. Ik wil dus een soort query als deze:
Code | Selecteer Alles
minimaliseren
1
SELECT iduserprice FROM tabel ORDER BY id DESC LIMIT 5


Alleen dan ook nog voor tabel2, tabel3, tabel4 etc. en dat ik 5 results in totaal krijg, gemeten over al deze 4 tabellen.
14-10-2011 17:31
Berichten: 277
avatar
Offline Stuur privébericht
Laat eerst een query zoeken naar hoeveel resultaten er in je tabel staan (in dit geval dus 9).
Vervolgens vul je in hoeveel resultaten je wilt.
Daarna wordt je volgende query:

DESC LIMIT 4,5

Waarin 4 de uitkomst is van resultaat (9) - limiet (5).
Waarin 5 het limiet is.
14-10-2011 17:34
Rapifia Europe
Berichten: 3718
avatar
Online Stuur privébericht
@Guido,
Die begrijp ik niet.
Bedoel je dat ik dat over alle tabellen moet uitvoeren?
14-10-2011 17:35
Berichten: 277
avatar
Offline Stuur privébericht
Ow, had het te snel gelezen
Dacht dat je wat anders bedoelde.

Edit:
Ik heb effe wat simpels in mekaar geflatst.
In dit script maak ik gebruik van de tabellen table1, table2 enz.
Het script pakt uiteindelijk de 5 meest recente resultaten uit 9 tabellen gebaseerd op tijd (functie time()).

Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$aantal_tabellen 9;
$aantal_resultaten 5;

for(
$i=1$i <= $aantal_tabellen$i++){
    
$what "table$i";
    
$dbres mysql_query("SELECT * FROM $what WHERE `id`!='' ORDER BY `time` DESC LIMIT 0,$aantal_resultaten"); 
    for(
$j=$begin+1$info mysql_fetch_object($dbres); $j++) {
        
$total_results++;
        
$array[$total_results] = $info->time;
    }
}

sort($array);
$arrays count($array);

for(
$i=1$i <= $aantal_resultaten$i++){
    
$ar $arrays-$i;
    
$result $array[$ar];
    echo 
"$result<br>";
}
14-10-2011 17:54
Rapifia Europe
Berichten: 3718
avatar
Online Stuur privébericht
@Guido,
Heel erg bedankt.
Weet je ook hoe ik extra data erin kan stoppen, dus dat ik ook andere velden in arrays kan stoppen?
14-10-2011 23:58
Berichten: 277
avatar
Offline Stuur privébericht
Jup ik heb op regel 9 wat informatie toegevoegd achter het streepje (-).
Deze informatie vraagt hij op regel 19 weer op.
De uitkomst van $result2[1] op regel 21 is dus wat $info->result op regel 9 bevat.

Ik heb dit script net als het voorgaande script getest en het werkt.
Als je liever het streepje wilt veranderen in iets anders zul je het zelf opnieuw moeten testen.
Bijvoorbeeld wanneer in je resultaat zo'n zelfde streepje voorkomt.

Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$aantal_tabellen 9;
$aantal_resultaten 5;

for(
$i=1$i <= $aantal_tabellen$i++){
    
$what "table$i";
    
$dbres mysql_query("SELECT * FROM $what WHERE `id`!='' ORDER BY `time` DESC LIMIT 0,5"); 
    for(
$j=$begin+1$info mysql_fetch_object($dbres); $j++) {
        
$total_results++;
        
$array[$total_results] = "{$info->time}-$info->result";
    }
}

sort($array);
$arrays count($array);

for(
$i=1$i <= $aantal_resultaten$i++){
    
$ar $arrays-$i;
    
$result $array[$ar];
    
$result2 explode("-",$result);
    echo 
"$result2[0]<br>
    
$result2[1]<br><br>";
}
15-10-2011 11:42
Rapifia Europe
Berichten: 3718
avatar
Online Stuur privébericht
@Guido,
Perfect!
Het werkt nu, heel erg bedankt.
15-10-2011 12:06
Reageer op: "Selecteer 5 laatste van tabellen"
1 | 2 Volgende pagina
Je kan niet reageren omdat je niet bent ingelogd. Inloggen of Aanmelden