MySQL eine ID niedriger ermitteln

fUnKuCh3n

Erfahrenes Mitglied
Hallo,

ich habe folgendes Problem, in einer SQL Tabelle habe ich mehrere Bilder mit eigenen bildids versehen gespeichert, nun möchte ich mir halt gerne diese Bilder durch Pfeile mit Weiter und Zurück navigierbar machen, sprich ich brauche ja die niedrigeste und höchste Bildid aus der Datenbank:

PHP:
$query = "SELECT galleryid, MIN(bildid) FROM partypics WHERE `galleryid` = '$galleryid' GROUP BY galleryid";

$result = mysql_query($query);
while($row = mysql_fetch_array($result))
 {
 $lowbild = $row['MIN(bildid)'];} //Niedrigste ID in der Datenbank mit der Galleryid XX

$query = "SELECT galleryid, MAX(bildid) FROM partypics WHERE `galleryid` = '$galleryid' GROUP BY galleryid";

$result = mysql_query($query);
while($row = mysql_fetch_array($result))
 {
 $highbild = $row['MAX(bildid)'];} //Höchste ID in der Datenbank mit der Galleryid XX

Aber was ist wenn jetzt z.b. die Bildid's nicht fortlaufend sind sondern der Admin z.b. mal eine gelöscht hat?

Momentan mach ich es einfach so dass die aktuelle Bildid ( per _GET geholt ) + 1 und -1 gerechnet wird um zum nächsten / vorigen Bild zu gelangen, aber wie gesagt bei nicht vorhandenen Bildids wird dies ein problem, wie würdet ihr dies am schlausten lösen? :confused:

Lg Sascha
 
Ganz einfach du liest immer die nächst höhere bzw. nächst niedrigere Bild-ID aus der Datenbank: mit

PHP:
...WHERE (bildID > '". $_GET['akutelleID'] ."') //also wo BildID größer der aktuellen ID ist
...WHERE (bildID < '". $_GET['akutelleID'] ."') //also wo BildID kleiner der aktuellen ID ist
 
Wenn ich dich richtig verstanden habe, könnte es mit folgendem Select-Statement funktionieren:

Code:
SELECT
    `bildid`
FROM
    `partypics`
WHERE
    `galleryid`=[GALLERY_ID]
ORDER BY
    `bildid` ASC
LIMIT
    [CUR_PIC], 1

Wobei [GALLERY_ID] die aktuelle Gallerie-ID ist und [CUR_PIC] der Index des aktuellen Bildes was angezeigt werden soll.

Am besten speicherst du dazu noch die Anzahl aller Datensätze der jeweiligen Gallerie, dann kannst du ganz einfach mit PHP darauf zugreifen:

SQL:
Code:
SELECT
    COUNT(*) AS `piccount`
FROM
    `partypics`
WHERE
    `galleryid`=[GALLERY_ID]

Und das alles in PHP zusammen:

PHP:
<?php
    ...
    $sql = "
            SELECT
                COUNT(*) AS `piccount`
            FROM
                `partypics`
            WHERE
                `galleryid`=$galleryid
           "

    $result = mysql_query($sql);
    $row = mysql_fetch_row($result);

    $max = $row[0];	// Größter Bildindex
    $min = 1;		// Kleinster Bildindex

    $cur_pic = $max;	// Aktueller Bildindex (kann nun ein Wert zwischen $min und $max annehmen)

    $sql = "
            SELECT
                `bildid`
            FROM
                `partypics`
            WHERE
                `galleryid`=$galleryid
            ORDER BY
                `bildid` ASC
            LIMIT
                $cur_pic, 1
           "

    $result = mysql_query($sql);
    $row = mysql_fetch_row($result);
    ....
?>


Edit: hm..... ich denk wohl zu kompliziert ~.^
 
Zuletzt bearbeitet:
Hey Jungs danke für die schnellen Typs, ich hab es nun wie folgt gelöst:

PHP:
$result = mysql_query("SELECT * FROM `partypics` WHERE `bildid` < '$bid' && `status` = '1' LIMIT 1");
while ($row = mysql_fetch_assoc($result))
{
$kleinerbild = $row['bildid'];
}

$result = mysql_query("SELECT * FROM `partypics` WHERE `bildid` > '$bid' && `status` = '1' LIMIT 1");
while ($row = mysql_fetch_assoc($result))
{
$groeserbild = $row['bildid'];
}
Gute Nacht!
 
Und wie im anderen Thread das "ORDER BY ASC bzw. DESC" nicht vergessen, sonst bekommst du nicht die direkt nebenstehende ID.
 
@MAN
*grins* das ist wirklich ein wenig kompliziert ^^ wobei, soweit ich deinen Code verstanden habe, würde das das Problem auch nicht lösen. Seine IDs sind auto_enciment-Werte und daher nicht so einfach mit count() durchzählbar ;)
und wenn dies so wäre, würde seine Methode auch ganz einfach funktionieren, indem er einfach nur zur aktuellen ID +1 (für aufsteigend) -1 (für absteigend) dazuzählt ;)

EDIT: Beim zweiten Post hast du recht ^^ ASC bei vorwärts und DSC bei zurück (aufsteigend, absteigend)
 
Zuletzt bearbeitet:
@MAN
*grins* das ist wirklich ein wenig kompliziert ^^ wobei, soweit ich deinen Code verstanden habe, würde das das Problem auch nicht lösen. Seine IDs sind auto_enciment-Werte und daher nicht so einfach mit count() durchzählbar ;)
und wenn dies so wäre, würde seine Methode auch ganz einfach funktionieren, indem er einfach nur zur aktuellen ID +1 (für aufsteigend) -1 (für absteigend) dazuzählt ;)

Nein, weil meine Methode nicht auf die IDs zugreifst, sondern nur auf die Stelle in der Tabelle. Gut, bei mir fehlt auch ein ORDER BY *rein editier* ;)
Und COUNT(*) zählt abhängig von dem Wert der ID einfach nur die Datensatzanzahl.
 
Zuletzt bearbeitet:
Zurück