Permalänk
Medlem

Frysa en MySQL hämtning?

Tjenare!

Håller på med ett litet hoppyprojekt nu och har stött på ett litet problem, eller nja det är inte riktigt ett problem utan snarare något för att öka användarvänligheten.

Säg att jag vill lista dom senaste bilduppladdningarna som alla användare gjort, eller när någon söker efter en bild och får upp några hundra resultat, dom första 25 resultaten visas och resten är paginated och då uppstår ett problem, nästa sidvisning hämtas också i tabellen med en offset på 25 och givetvis skapar detta problem om någon annan laddar upp 100 bilder under tiden den som sökte var på första sidan och bläddrar vidare.

Teoretiskt sett kan sökaren när han bläddar bakåt i själva verket hamna framför dom bilderna han redan kollat på.

Hur löser man detta på bästa sätt? Hittar inte något jättevettigt i MySQL dokumentationen förutom att man skulle per användare/sökning cacha skiten och sen får användaren bläddra i cachen istället, detta lär skapa problem om massa söker samtidigt, skapa en temporär cach per användare/sökning känns inte så effektigt.

Några tips?

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Medlem

Gar det inte gora nat sant har:
Nar besokaren gor en sokning, sa lagras id (sorterade efter sokningen) for alla bilder fran sokningen i en session. Och nar besokaren sedan browsar bilderna, sa hamtas de baserat pa de id som ligger i sessionen.

Detta gor att om fler bilder laggs till efter sokningen agt rum, sa kommer de inte ligga med i sok-resultatet. Och nar man gor en ny sokning sa skriver man helt enkelt over den gamla sessionen.

Har aldrig gjort nagot liknande, men nagot sant hade jag nog forsokt med. Finns ju 1000 losningar pa problemet

Visa signatur

..:: RiJo ::..
Computer: Lenovo X300
Platform: Gentoo

Permalänk

Kanske att du lägger till en ytterligare kolumn i databasen med tiden då varje bild laddades upp. När användaren söker lagras tiden för sökningen i sessionen och sökresultatet begränsas till att endast visa bilder som laddades upp innan tiden för sökningen.

Kanske att du kan använda en räknare som räknar upp för varje bild som laddas upp. När användaren söker lagras räknarvärdet för den senaste bilden i sessionen och sökresultatet begränsas till att endast visa bilder med räknarvärde <= det lagrade räknarvärdet.

Permalänk
Medlem

Hmm. Borde man inte kunna slänga in en timestamps cookie som man använder sig av vid sin sql?
Så om vi har en tabell som innehåller PathToImage, Description och Timestamp
Typ; SELECT PathToImage, Description FROM Images WHERE Timestamp < '2010-08-11 09:47:00'

Så när varje bild blir uppladdad så har vi en timestampkolumn där vi sätter när den blev uppladdad och sen i vår sql så hämtar vi alla bilder som blev upplagda efter tiden vi besökte.

Permalänk
Medlem

Timestamp ar en bra ide, varfor tankte jag inte pa det.. Da behover du ju bara lagra ett varde och sedan hamta alla bilder som ar uppladdade <= Timestamp.

Jag anvander oftast tva extra falt i mina tabeller: created och changed. Dar created satts till NOW() nar tupeln skapas, och changed ar en timestamp med attributet 'on update CURRENT_TIMESTAMP' och default 'CURRENT_TIMESTAMP'. Ar bra att ha om man vill gora en query med t.ex. 'Senast Uppdaterad: ...'.

Edit: du behover nog inte lagga det i en cookie, da en sessions-variabel bor racka. Beror pa om du vill kunna aterfa sokresultatet efter weblasaren stangts ner.

Visa signatur

..:: RiJo ::..
Computer: Lenovo X300
Platform: Gentoo

Permalänk
Medlem

Tack för tipsen, testar 2 olika sätt och återkommer om jag stöter på problem

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?