Toon posts:

[mysql]Controleren of Id in een resultaat set zit

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een simpel image gallery scriptje, maar blijf zitten met een klein probleembje.

De gallery laat eerst een pagina zien met thumbnails. Wanneer ik nu veel thumbnails heb worden deze verdeelt over diverse pagina's. Das ook geen probleem. Wanneer ik nu op een thumbnail klik dan krijg ik de grote foto te zien met daar onder een knop vorige / volgende. Als ik nu op vorige of volgende klik ga ie mooi naar een andere grote foto, ook geen probleem. Probleem komt pas om de hoek wanneer ik weer op de grote foto klik om terug te gaan naar het thumbnail overzicht. Wanneer ik nu tig x op bv volgende geklikt hebt zit ik natuurlijk al op bv pagina 3. Echter in mijn link staat nog steeds foto.php?page=2&foto=25

Nu had ik wel een oplossing bedacht, maar ik weet de juiste sql niet. Ik zou nu bovenaan de pagina een query willen uitvoeren om te kijken op de foto id nog steeds op de juiste pagina zit en wanneer dit niet het geval ik de pagina met 1 te verhogen of te verlagen.

Met onderstaande query kan ik alle photo_id opvragen die bij een bepaalde pagina horen, maar nu zou ik nog met een while (photos = mysql_fetch_object($query)) het hele resultaat moeten doorlopen en dan moeten kijken of de foto hier tussen zit.
code:
1
select photo_id from photo order by (photo.date_added+photo.mtime) desc limit $ibegin,$iitems


Is er misschien een functie die meteen ziet of een id waarde in de resultaat set zit of niet ?? Ik heb onderstaande query al geprobeert, maar dan krijg ik de melding : #1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
code:
1
SELECT photo_id FROM photo WHERE $photo_id = any(SELECT photo_id FROM photo WHERE (photo.cat_id = '$catid') ORDER BY (photo.date_added + photo.mtime) DESC LIMIT $ibegin , $iitem)


Ik maak gebruik van MySQL 4.1.9. Alle vars in de query worden natuurlijk netjes gevuld met nummers in mijn php scriptje

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 02-01 05:18

KompjoeFriek

Statsidioot

Stel je hebt het maximale aantal thumbs in een var staan, $max_thumbs bijvoorbeeld.

dan zou je toch zoiets kunnen doen? (als je id's altijd netjes oplopend zijn teminste)
PHP:
1
2
3
4
<?php
  $page = floor( $photo_id / $max_thumbs ) + 1;
?>
foto.php?page=<?= $page ?>&foto=<?= $photo_id ?>

WhatPulse! - Rosetta@Home - Docking@Home


  • MueR
  • Registratie: Januari 2004
  • Laatst online: 21:13

MueR

Admin Devschuur® & Discord

is niet lief

Je zou natuurlijk ook gewoon IN(array) kunnen pakken. Dat wordt wel ondersteund door die versie van MySQL.
PHP:
1
$query = "SELECT photo_id FROM photo WHERE photo_id IN (".$je_array.") ORDER BY (photo.date_added+photo.mtime) DESC LIMIT $ibegin,$iitems";

Anyone who gets in between me and my morning coffee should be insecure.


Verwijderd

Volgens mij komt de vraag voor de IN parameter tegenwoordig elke week langs. Is er iets mis met de zoekfunctie? :)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

MueR schreef op zaterdag 18 juni 2005 @ 16:39:
Je zou natuurlijk ook gewoon IN(array) kunnen pakken. Dat wordt wel ondersteund door die versie van MySQL.
PHP:
1
$query = "SELECT photo_id FROM photo WHERE photo_id IN (".$je_array.") ORDER BY (photo.date_added+photo.mtime) DESC LIMIT $ibegin,$iitems";
Stop dan gewoon die subquery die in de met de ANY gebruikt wordt in de topicstart in de IN van jouw query ;)

Maar ik denk dat zoiets ook wel kan testen of ie op een specifieke pagina zit:
SQL:
1
SELECT $jePhotoId IN (SELECT ... LIMIT ...)

(er is bewust geen from en where opgeven in de buitenste select)

Als je wilt weten op welke pagina ie zit kan je zoiets nemen:
SQL:
1
2
3
4
5
SELECT
    (SELECT COUNT(*) FROM photos pi
       WHERE pi.photoid <> p.photoid
      AND pi.date_added+pi.mtime < p.date_added+p.mtime)
  / $per_pagina FROM photos p WHERE p.photoId = $X

[ Voor 4% gewijzigd door ACM op 18-06-2005 17:04 ]