vorheriges, nächstes und aktuelles Element

salzstange

Grünschnabel
Hallo!

Ich arbeite jetzt die ganze Zeit schon an einem messaging system und bin damit so gt wie fertig. für den komfort wollte ich jetzt noch in meiner display_msg.php wei links reinhaun, die jeweils zur vorherigen und zur nächsten msg verweisen. und dann noch eine info die wievielte msg das aus dem ordner ist.

was ich jetz brauche is etwas, was mir sagt, wie ich aus unten stehender abfrage (nach dem schema werden die msgs gelisted) sagt, die wievielte msg jetz die msg mit der id sagen wir mal 21 ist. Und dann noch welche msg davor war, und welche danach kommt. auf die ids kann man nicht zurückgreifen, weil da ja msgs verschoben oder gelöscht sein können. habe schon versucht mit foreach, array_search und next/prev was zu machen, aber scheinbar raff ich das nicht! Bin nicht so erfahren, also habt nachsicht. wahrscheinlich is die lösung ganz nah, aber schläft zu der uhrzeit schon ;)

PHP:
$query="SELECT `message_id` FROM `messages` WHERE `to`=";
$query.=$_SESSION[id]." AND `folder`='$folder' ORDER BY `time`";
 
Kannst auch die ID nehmen... ist ja egal, ob eine geloescht wurde, nimm einfach die naechst kleinere (wenn das auch nicht sehr elegant ist).
Muesste irgendwie so machbar sein:
Code:
SELECT
    message_id AS previous_id
FROM
    messages
WHERE
    `to` = '$uid' AND
    message_id < '$currentid'
ORDER BY
    message_id DESC
LIMIT 0,1;

Genauso kannst du es dann auch mit der Zeit anstatt der ID anstellen
 
@fatalus
ich ordne ja schon nach zeit. aber ich brauch die msg id

@Zatic
die idee ist gut! ich kann jetzt die nächste und die vorherige id bestimmen:

PHP:
function nextPrevCurMsg($folder,$mid) {
    $query="SELECT message_id FROM messages WHERE";
    $query.=" `to` = $_SESSION[id] AND folder='$folder' AND message_id < $mid ";
    $query.="ORDER BY time DESC LIMIT 0,1";
    $result=mysql_query($query);
    if(mysql_num_rows($result)==1) 
        $prev=mysql_result($result,0);
    $query="SELECT message_id FROM messages WHERE";
    $query.=" `to` = $_SESSION[id] AND folder='$folder' AND message_id > $mid ";
    $query.="ORDER BY time ASC LIMIT 0,1";
    $result=mysql_query($query);
    if(mysql_num_rows($result)==1)
        $next=mysql_result($result,0);
    
    //$newArray=array("prev" => $prev,"cur" => $cur,"next" => $next);
    $newArray=array("prev" => $prev,"next" => $next);
    return $newArray;
}

die aktuelle position krieg ich jetz bestimmt noch mit ner einfachen schleife hin. danke nochmal!
 
Zuletzt bearbeitet:
Zurück