vorige en volgende post van gebruiker uit database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Koen B

Koen B

16/02/2007 16:11:00
Quote Anchor link
Hallo

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)
PHP script in nieuw venster Selecteer het PHP script
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
 
PHP hulp

PHP hulp

20/11/2024 05:39:20
 
Jesper Diovo

Jesper Diovo

16/02/2007 16:21:00
Quote Anchor link
Hmm..
Misschien dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 "";
}

?>


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
 
Frank -

Frank -

16/02/2007 16:22:00
Quote Anchor link
Quote:
De datum word trouwens ook opgeslagen in de vorm: 1171638404
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.

Quote:
en ooit misschien wel honderd duizend!
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.
 
Koen B

Koen B

16/02/2007 16:27:00
Quote Anchor link
@Frank
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!
 
Joren de Wit

Joren de Wit

16/02/2007 16:30:00
Quote Anchor link
koen schreef op 16.02.2007 16:27:
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)
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!
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Koen B

Koen B

16/02/2007 16:35:00
Quote Anchor link
Blanche schreef op 16.02.2007 16:30:
koen schreef op 16.02.2007 16:27:
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)
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!


Okey, het kan wel ;) Maar ik vind rekenen met een timestamp een stuk makkelijker :) En php kan er dan ook beter mee rekenen
 
Joren de Wit

Joren de Wit

16/02/2007 16:42:00
Quote Anchor link
Maar zoals ik al zei, rekenen met data en tijden kun je beter aan de database overlaten. Het arsenaal aan functies dat MySQL je biedt om te rekenen met deze gegevens is vele malen groter dan dat je in PHP hebt.

Natuurlijk, je kunt hetzelfde resultaat van specifieke mysql functies wel in php bereiken, maar waarom het wiel nog een keer uitvinden?
 
Frank -

Frank -

16/02/2007 16:47:00
Quote Anchor link
;) Koen, dat het een timestamp is, dat kon ik ook wel raden. Dat het een slecht idee is, dat probeerde ik je hier te vertellen.

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
SELECT
  *
FROM
  tabelnaam
WHERE
  DAYOFWEEK(datumveld) = 2
AND
  HOUR(datumveld) = 11

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.
 
Koen B

Koen B

16/02/2007 17:03:00
Quote Anchor link
Dankje djemo!!
hij werkt nu goed :) ik moest hem wel wat aanpassen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>";}


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)
 
Joren de Wit

Joren de Wit

16/02/2007 17:06:00
Quote Anchor link
Quote:
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)
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 ;)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.