[PHP]Aktuelle Seite anhand einer ID errechnen

krizzelfix

Commander
Registriert
Sep. 2005
Beiträge
2.626
Hallo zusammen,

ich habe auf meiner Startseite vier zufalls Bilder, die ich natürlich auch verlinken will. Dazu übergebe ich die ID des Bildes.
Jetzt brauche ich die Seite auf der sich das Bild befindet, um noch navigieren zu können.
Wie kann ich jetzt berechnen auf welcher Seite ich grade bin.

Meine MySQL-Tabelle sieht so aus:

|..pictureid..|..folderid..|..filename..|..clicks..|..online..|
+-------------+------------+-------------+---------+----------+
|.....516.......|.....7........|..1.JPG.......|..50......|....1.......|


Grüße

tewes
 
Beschreibe dein Problem mal etwas genauer.
Also ich habe das jetzt so verstanden, dass du eine Bildergalerie hast und daraus vier zufällig ausgewählte Bilder auf deiner Startseite anzeigen willst. Bei Klick auf ein Bild wird man zur Galerie weitergeleitet, in der man dann zum vorherigen und nächsten Bild navigieren kann. Aber ich kann mir unmöglich vorstellen, dass du das gemeint hast, da die Lösung ja selten simpel wäre. Das vorherige Bild wäre pictureid-1 und das nächste Bild pictureid+1.
 
Doch so habe ich es gemeint.
Nur bei mir werden die Bilder nicht anhand der pictureid ausgewählt, sondern der Page.
Deswegen muss ich berechnen, auf welcher Seite ich mich befinde, um das Bild auzulesen.
 
Ich habe ein Klasse mit der ich die komplette Galerie abbilden kann.
An den Konstruktor übergebe ich dann auf welcher Seite ich mich grade befinde. Mit dieser Variable errechne ich welche/welches Bild/Bilder angezeigt werden.

Da ich aber auf meiner Startseite nicht weiss auf welcher Seite sich das Bild befinden, will ich die Möglichkeit haben eine ID an die Klasse zu übergeben, und dann die Aktuelle Page zu berechnen.

Hoffe das Hilft dir weiter.
 
Okay, soweit verstanden. Nur wonach richtet es sich denn, zu welcher Page welches Bild gehört? Aus der oben angegebenen Datenbanktabelle (pictureid, folderid, filename, clicks, online) kann ich jedenfalls nicht direkt ableiten, zu welcher Page welches Bild gehört.
 
Das berechne ich Jedesmal
PHP:
SELECT
				`t1`.`pictureid`, `t1`.`folderid`, `t1`.`filename`, `t1`.`clicks`, `t1`.`online`,
				`t2`.`folderid`, `t2`.`foldername`, `t2`.`name`,
				`t3`.`yearid`, `t3`.`year`
			FROM
				`picture` `t1`
				LEFT JOIN
					`picture_folder` `t2`
				ON
					`t1`.`folderid` = `t2`.`folderid`
				LEFT JOIN
					`picture_year` `t3`
				ON
					`t2`.`yearid` = `t3`.`yearid`
			WHERE
				`t1`.`online` = '1'
				AND
			`t1`.`folderid` = '".$this->folder."'
			ORDER BY CAST(`filename` AS SIGNED) ASC, `pictureid` DESC
			LIMIT ".($this->Page - 1)*$this->ObjectPerPage.", ".$this->ObjectPerPage
$this->Page: Aktuelle Seite
$this->ObjectPerPage: Anzahl der Bilder auf einer Seite. (Object, weil es auch Kommentare aus einem Gästebuch sein können).
 
Zuletzt bearbeitet:
ich hab zwar das system nich ganz verstanden, aber wenn ich den select richtig verstehe müsste es schon reichen die where clause etwas zu erweitern:


in der methode die jeweilige pic id mitgeben



SELECT
`t1`.`pictureid`, `t1`.`folderid`, `t1`.`filename`, `t1`.`clicks`, `t1`.`online`,
`t2`.`folderid`, `t2`.`foldername`, `t2`.`name`,
`t3`.`yearid`, `t3`.`year`
FROM
`picture` `t1`
LEFT JOIN
`picture_folder` `t2`
ON
`t1`.`folderid` = `t2`.`folderid`
LEFT JOIN
`picture_year` `t3`
ON
`t2`.`yearid` = `t3`.`yearid`
WHERE
`t1`.`online` = '1'
AND
`t1`.`folderid` = '".$this->folder."'

/* hier begin */
AND
`t1`.`pictureid` = '".$deinePicId."'
/* hier ende */

ORDER BY CAST(`filename` AS SIGNED) ASC, `pictureid` DESC
LIMIT ".($this->Page - 1)*$this->ObjectPerPage.", ".$this->ObjectPerPage
 
@Computer Freak: Was du damit erreichen willst verstehe ich nicht ganz. Da wenn eine ID übergeben wir nur ein Bild angezeigt würe ja immer X / 1. Das kann ja keine Seite sein, da ich bei meinen Testdaten schon bei einer ID von weit über 500 bin.

@ricomq: Deinen Vorschlag guck ich mir morgen mal genauer an.

Grüße

tewes
 
Du hast die Bildnummer sowie die Anzahl der Bilder pro Seite vorgegeben. Nun willst du daraus die aktuelle Seite errechnen. Machen wir doch mal ein Beispiel mit konkreten Zahlen. Du möchtest wissen, auf welcher Seite sich Bild Nummer 49 befindet. Auf jeder Seite sollen 9 Bilder angezeigt werden. Nun rechnest du 49 durch 9 gleich 5,4444. Das Ganze wird nun noch durch die Funktion ceil() zu 6 aufgerundet. Damit befindet sich Bild Nummer 49 bei 9 Bildern pro Seite auf der Seite 6. Wenn wir nun die Probe machen, kommt raus, dass sich auf der Seite 6 die Bilder 46 bis 54 befinden. Die Rechnung stimmt also.
 
Ja oke, da gebe ich dir recht. In dem Fall stimmt deine Rechnung.
Es ist aber der Fall, dass die Gesamtanzahl der Bilder bei z.B. 151 liegt und die ID könnte 516 und es wird ein Bild pro Seite angezeigt.
Da wird es nicht klappen.
 
Habs jetzt ziemlich dreckig gelöst. Habe aber keinen anderen Lösungsweg gesehen.
PHP:
$id = intval($id);
		
		$sql = "
			SELECT
				`pictureid`
			FROM
				`picture`
			WHERE
				`folderid` = (SELECT
								`folderid`
							FROM
								`picture`
							WHERE
								`pictureid` = '".$id."')
			AND
				`online` = '1'
			ORDER BY CAST(`filename` AS SIGNED) ASC, `pictureid` DESC
		";
		
		$s = query($sql);
		
		$i = 1;
		while ($r = mysql_fetch_assoc($s)) {
			if ($r['pictureid'] == $id) {
				break;				
			}
			$i++;
		}
		return $i;
Bin für jeden Verbesserungsvorschlag dankbar.

Grüße

Tewes
 
Macht es nicht mehr Sinn, die Seitennummer zu Cachen?
Sprich einmal zu berechnen, auf welcher Seite welches Bild zu sehen ist, so wie es bei jedem Aufruf schon passiert, aber diese Ergebnis auch zu speichern in der Datenbank. Sofern du dann ein neues Bild hinzufügt oder eines löscht/deaktivierst, lässt die die Seitennummern neu berechnen.

Somit wäre der Aufwand pro Bild geringer. Und Bilder "ansehen" passiert öfters als "Bilder ändern".

nox
 
Ja mit deiner Begründung gebe ich dir recht.
Werde es vll in zukunft einbauen.

Grüße

tewes
 
Zurück
Oben