Gegevens opvragen
Ik haal als eerste de gegevens uit een db, deze zet ik in een bestand (php) netjes in een tabeltje. Dit tabeletje sla ik op als bestand "ranks.php". Deze ranks update elk kwartier een nieuw bestand. Dit gaat allemaal helemaal goed geen vragen over werkt ook helemaal.
Nu is mijn vraag, ik wil 1 gegeven opvragen in die tabel. Hoe moet ik dat doen? Ik kan e.v.t.w ik heb al geprobeer array te gebruiken maar dit werkt maar 1x. Iemadn een idee hoe ik het kan doen?
SELECT veldnaam1, veldnaam2
FROM tabelnaam
WHERE id = 3
Code (php)
1
2
3
4
5
2
3
4
5
function cacheranks() {
ob_start(); // laat output buffer toe (activeren)
setlocale(LC_TIME, "dutch"); // nederlands tijdsformaat instellen
$result = mysql_query("SELECT * FROM level ORDER BY id ASC LIMIT 0,10");
?>
ob_start(); // laat output buffer toe (activeren)
setlocale(LC_TIME, "dutch"); // nederlands tijdsformaat instellen
$result = mysql_query("SELECT * FROM level ORDER BY id ASC LIMIT 0,10");
?>
<table width="200" border="1">
<tr>
<th scope="col">ID</th>
<th scope="col">NAAM</th>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</table>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
$tijd = time();
$tijdtoen = tijd($tijd);
// einde lus
$uitvoer = ob_get_contents(); // steekt gans de buffer in variabele $uitvoer
ob_end_clean(); // maakt output buffer leeg en de-activeert het
// Nu kunnen we kiezen: ofwel steken we gans de uitvoer in een bestand op de server (in folder), ofwel schrijven we het netjes weg naar een configuratie rij in je mysql tabellen.
// Maar aangezien snelheid primeert in dit geval: steek het maar in een bestandje: cache.inc.php
$cache = fopen("include/gegevens/cacheranks.php","w");
fputs($cache, $uitvoer); // wegschrijven in bestand
fclose($cache); // sluit bestandsverbinding
}
$tijd = time();
$tijdtoen = tijd($tijd);
// einde lus
$uitvoer = ob_get_contents(); // steekt gans de buffer in variabele $uitvoer
ob_end_clean(); // maakt output buffer leeg en de-activeert het
// Nu kunnen we kiezen: ofwel steken we gans de uitvoer in een bestand op de server (in folder), ofwel schrijven we het netjes weg naar een configuratie rij in je mysql tabellen.
// Maar aangezien snelheid primeert in dit geval: steek het maar in een bestandje: cache.inc.php
$cache = fopen("include/gegevens/cacheranks.php","w");
fputs($cache, $uitvoer); // wegschrijven in bestand
fclose($cache); // sluit bestandsverbinding
}
Gewijzigd op 01/01/1970 01:00:00 door Tim
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$sqlQuery = mysql_query("SELECT * FROM tabel_blaat WHERE id='3' LIMIT 1"); // Query uitvoeren
if(mysql_num_rows($sqlQuery) == 1) // Kijken of de query resultaat opgelevert heeft.
{
$sqlResult = mysql_fetch_array($sqlQuery); // Opslaan in Array
// Hier de data verwerken !!
}
else
{
echo('Geen data gevonden die voldeet aan uw query<br />');
echo(mysql_error());
}
?>
$sqlQuery = mysql_query("SELECT * FROM tabel_blaat WHERE id='3' LIMIT 1"); // Query uitvoeren
if(mysql_num_rows($sqlQuery) == 1) // Kijken of de query resultaat opgelevert heeft.
{
$sqlResult = mysql_fetch_array($sqlQuery); // Opslaan in Array
// Hier de data verwerken !!
}
else
{
echo('Geen data gevonden die voldeet aan uw query<br />');
echo(mysql_error());
}
?>
Als ik nu gegevens opvraag door bovenstaande manier heb ik er nog niks aan:).
filemtime) Is die ouder dan een bepaald moment dan haalt hij de gegevens uit de database en slaat ze (via serialize, of meteen direct, kan ook) op in het bestand en returnt/echo't ze.
Bestaat het bestand wel al, dan kan je het met file_get_contents teruggeven, of sneller, met fopen & fpassthru meteen naar de output(buffer) doorsturen.
Achteraf wel even testen of het daadwerkelijk sneller is en minder schijfactiviteit oplevert natuurlijk.
Ik zou gewoon een functie maken die kijkt wat de aanmaaktijd van het cache-bestand is (Bestaat het bestand wel al, dan kan je het met file_get_contents teruggeven, of sneller, met fopen & fpassthru meteen naar de output(buffer) doorsturen.
Achteraf wel even testen of het daadwerkelijk sneller is en minder schijfactiviteit oplevert natuurlijk.
Ik wil dus nu UIT de cahce bestand de gegevens opvragen van ID 1 hoe doe ik dat:).
Dan zou ik het nooit als HTML tabel in een bestand opslaan, maar eerder op een CSV achtige manier. Zelf gebruik ik dan als veldscheidingsteken meestal een | (pipe), die komt in normale tekst nooit voor. Als recordscheidingsteken gebruik je een harde return.
Je bestand ziet er dan zo uit:
1|Jan
2|Piet
3|Klass
Nu kun je het openen met:
Code (php)
Als je nu de gegevens van ID=1 wilt hebben doe je eenvoudig $ranks[1]
Edit:
overigens vraag ik me af of je op deze manier werkelijk minder serverload krijgt. Of je nu de gegevens uit een DB leest, of uit een CSV-bestand. Een DB is er speciaal voor ontworpen en werkt met indexen en dergelijk om het opvragen van data te versnellen.Edit:
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
Daarna je queries verbeteren (geen * gebruiken, alleen selecteren wat je nodig hebt, werken met LIMIT enz. enz.)
Daarbij, een beetje database heeft zelf ook al allemaal vormen van cachen en bufferen. Maak je daar maar geen zorgen om.
Maar ik ga hier aan werken. Bedankt:).
Edit:
Gelukt, Bedankt :)
Gewijzigd op 01/01/1970 01:00:00 door Tim