vorige en volgende post van gebruiker uit database
ik heb op mijn site een berichten systeem waar mensen een bericht naar elkaar kunnen sturen. Dus iederen heeft een eigen inbox.
Als iemand een bericht bekijkt wil ik daar 2 links die naar de volgende en vorige post gaan. Maar dan moet ik de id's van die posts weten.
de huidige post haal ik zo uit de database:
Code (php)
1
$select = "SELECT * FROM pb WHERE id='".addslashes($_GET['lees_id'])."' AND voor='".$list->gebruikersnaam."'";
Nu wil ik dus ook de id's van de vorige en volgende post voor die gebruiker weten. Het is dus niet $list->id - 1; omdat er ook posts van andere gebruikers tussen zitten ...
De datum word trouwens ook opgeslagen in de vorm: 1171638404
Misschien is dat handig om te gebruiken?
Ik wil proberen om het zo efficient mogelijk te houden omdat er tienduizenden berichten zijn, en ooit misschien wel honderd duizend! Dan is het niet echt prettig om alles in een while(){} te controleren ....
Alvast bedankt, Koen
Misschien dit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$vorige_sql = mysql_query("SELECT id FROM pb WHERE id<".$_GET['id']." AND voor='".$list->gebruikersnaam."'");
if(mysql_num_rows($vorige_sql) >= 1)
{
while($rij = mysql_fetch_array($vorige_sql))
{
echo "<a href='?id=".$rij['id']."'>Vorige</a>";
}
}else{
echo "";
}
$volgende_sql = mysql_query("SELECT id FROM pb WHERE id>".$_GET['id']." AND voor='".$list-gebruikersnaam."'");
if(mysql_num_rows($volgende_sql) >= 1)
{
while($rij = mysql_fetch_array($volgende_sql))
{
echo "<a href='?id=".$rij['id']."'>Volgende</a>";
}
}else{
echo "";
}
?>
$vorige_sql = mysql_query("SELECT id FROM pb WHERE id<".$_GET['id']." AND voor='".$list->gebruikersnaam."'");
if(mysql_num_rows($vorige_sql) >= 1)
{
while($rij = mysql_fetch_array($vorige_sql))
{
echo "<a href='?id=".$rij['id']."'>Vorige</a>";
}
}else{
echo "";
}
$volgende_sql = mysql_query("SELECT id FROM pb WHERE id>".$_GET['id']." AND voor='".$list-gebruikersnaam."'");
if(mysql_num_rows($volgende_sql) >= 1)
{
while($rij = mysql_fetch_array($volgende_sql))
{
echo "<a href='?id=".$rij['id']."'>Volgende</a>";
}
}else{
echo "";
}
?>
Ik zou echt niet weten of het wel kan met dat > en <. Volgens mij kan het niet eens.. maar ik zou het anders ook niet weten :P
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
Quote:
Hmmm, 1171638404 komt op mij over als een groot getal, maar lijkt in de verste verte niet op een datum. Een datum sla je op in een DATE en wanneer je ook de tijd nodig hebt, in een DATETIME.De datum word trouwens ook opgeslagen in de vorm: 1171638404
Quote:
Dan is het prettig om te weten dat de database wel een paar miljard records kan opslaan! Je hoeft je dus niet druk te maken om een lullige honderduizend records.en ooit misschien wel honderd duizend!
Nou en of dat een datum is!
Als je als datum als date opslaat kan je er niet mee rekenen (dan moet je hem eerst in de vorm omzetten zoals ik hem heb)
Het heet een timestamp en is het aantal seconde na 1januari 1970 volgens mij :o
En over die honderduizend dingen in mysql: Dat zou best kunnen maar als je ze in een while in php allemaal langs moet gaan om te kijken welke 2 er het dichtste bij zitten duurt het wel lang! Ik heb laatst een grote while gemaakt, en toen deed hij 16 seconden over 100.000 dingen!
@Djemo
Dankje! Ik ga het meteen uitproberen!
koen schreef op 16.02.2007 16:27:
Dat kan zeker wel! Volgens mij heb jij hoofdstuk 12.5 van de mysql handleiding nog nooit gezien. Rekenen met data en tijdens doe je in MySQL en niet in PHP!Als je als datum als date opslaat kan je er niet mee rekenen (dan moet je hem eerst in de vorm omzetten zoals ik hem heb)
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Blanche schreef op 16.02.2007 16:30:
koen schreef op 16.02.2007 16:27:
Dat kan zeker wel! Volgens mij heb jij hoofdstuk 12.5 van de mysql handleiding nog nooit gezien. Rekenen met data en tijdens doe je in MySQL en niet in PHP!Als je als datum als date opslaat kan je er niet mee rekenen (dan moet je hem eerst in de vorm omzetten zoals ik hem heb)
Okey, het kan wel ;) Maar ik vind rekenen met een timestamp een stuk makkelijker :) En php kan er dan ook beter mee rekenen
Natuurlijk, je kunt hetzelfde resultaat van specifieke mysql functies wel in php bereiken, maar waarom het wiel nog een keer uitvinden?
Jij kunt bv. onmogelijk op een eenvoudige manier alle records opvragen die op een maandagmorgen tussen 11 en 12 uur zijn aangemaakt. Wanneer je een DATETIME gebruikt, is dat een fluitje van een cent:
Hoe simpel wil je het hebben? Zet de database vor jou aan het werk, het heeft weinig zin om het wiel opnieuw met PHP uit te gaan vinden.
hij werkt nu goed :) ik moest hem wel wat aanpassen:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
$vorige_sql = mysql_query("SELECT id FROM pb WHERE id<".addslashes($_GET['lees_id'])." AND voor='".$list->gebruikersnaam."' AND gelezen !='deleted' ORDER BY id DESC LIMIT 0, 1");
$rij = mysql_fetch_array($vorige_sql);
if(mysql_num_rows($vorige_sql) >= 1){
$vorige = "<a href='pb.php?lees_id=".$rij['id']."'>Previous</a> - ";
}
$volgende_sql = mysql_query("SELECT id FROM pb WHERE id > ".addslashes($_GET['lees_id'])." AND voor='".$list->gebruikersnaam."' AND gelezen !='deleted' LIMIT 0, 1 ");
$rij = mysql_fetch_array($volgende_sql);
if(mysql_num_rows($volgende_sql) >= 1){
$volgende = " - <a href='pb.php?lees_id=".$rij['id']."'>Next</a>";}
$rij = mysql_fetch_array($vorige_sql);
if(mysql_num_rows($vorige_sql) >= 1){
$vorige = "<a href='pb.php?lees_id=".$rij['id']."'>Previous</a> - ";
}
$volgende_sql = mysql_query("SELECT id FROM pb WHERE id > ".addslashes($_GET['lees_id'])." AND voor='".$list->gebruikersnaam."' AND gelezen !='deleted' LIMIT 0, 1 ");
$rij = mysql_fetch_array($volgende_sql);
if(mysql_num_rows($volgende_sql) >= 1){
$volgende = " - <a href='pb.php?lees_id=".$rij['id']."'>Next</a>";}
Nu pakt hij maar 1 volgende en niet allemaal
en ook degene die het er dicht bijzit, en niet het verste vandaag :)
Erg bedankt!
@frank
Dat wist ik niet dat het zo kan, maar ik blijf toch timestamps gebruiken :)
Vind ik persoonlijk gewoon makkelijker (omdat ik weet hoe dat werkt)
Quote:
Hehe, dat blijft natuurlijk jouw keuze. Maar misschien iets om in de toekomst eens aandacht aan te besteden? Ik kan je verzekeren, het is niet moeilijk en als je het eenmaal doorhebt, heb je er alleen maar profijt van ;)Dat wist ik niet dat het zo kan, maar ik blijf toch timestamps gebruiken :)
Vind ik persoonlijk gewoon makkelijker (omdat ik weet hoe dat werkt)
Vind ik persoonlijk gewoon makkelijker (omdat ik weet hoe dat werkt)