webForumDet fria alternativet

hämta specifik rad i en variabel av typ mysql_query

PHPur PHP

8 svar · 282 visningar · startad av fredriksk

Medlem sedan maj 2001211 inlägg
Frågan#1

jo alltså jag har hämtat ut info från min databas och sparat i en variabel. typ så här:

$variabel = mysql_query($sqlfraga, $link);

I normala fall så hämtar man ju en rad i taget typ så här:

$rad= mysql_fetch_row($variabel);

Men hur kan man smidigast hämta... säg... rad 4-6 och sedan rad 2-3?

Finns det funktioner för att flytta "pekaren" i $variabel?

Hoppas jag har klargjort nog?

Medlem sedan maj 2002647 inlägg
#2

Om du använder följande:

$sql = "SELECT * FROM tabell LIMIT $start,$stop";

Då är det bara att sätta $start där du vill att den ska börja och $stop till hur många rader du vill ha. Detta går lätt att fixa så att du kan "flytta pekaren" genom att kolla om $start är satt, om inte är den noll... men om den är det så är $start = $start+5 (eller hur mycket du nu har satt $stop till)

Hoppas det hjälper. ;)

Medlem sedan jan. 2000372 inlägg
#3

Kolla också in next() och prev() och varför inte current() och array_search() när du ändå håller på. :)

Medlem sedan maj 2001211 inlägg
#4

Mungo skrev:

Kolla också in next() och prev() och varför inte current() och array_search() när du ändå håller på. :)

Jo men dessa fungerar väl inte på en variabel av typ: mysql_query()?

Alltså jag har en variabel, $resultat som är av typen mysql_query. Denna innehåller en HEL tabell. Som jag har fattat det så är det dock ingen vanlig array detta? vare sig en två eller tre dimensionell sådan. Det går alltså inte plocka ut ett värde ur denna variabel på följande sätt?

$varde = $resultat[2]; //går inte
$varde = $resultat[3][2] //går inte heller.

Alltså måste jag plocka en rad först ur denna variabel. Det är här i problemet ligger. Jag vill kunna plocka en specifik rad, vilken som. Ett sätt är ju att göra en loop först typ så här:

//Om jag vill ha rad 5
for (i=0; i<5; i++)
{
$temp = mysql_fetch_row($resultat);
}

//sedan plockar jag rad 5 då
$rad = mysql_fetch_row($resultat);

Inte så snyggt och problemet är hur jag skall göra om jag därefter vill hämta ut rad 4:a...

Borde nog förklarat bättre från början...

Medlem sedan jan. 2000372 inlägg
#5

Ja, men du kan ju slänga in ditt resultat i en egen array? Detta borde funka:

$sql = "SELECT * FROM hejsan";
$rs = mysql_query($sql);
while ($row = mysql_fetch_array($rs)) {
 $rAr[] = $row;
  }

Nu har du hela klumpen i $rAr och torde kunna använda t.ex. $rAr[0]['id'] om jag förstått rätt. Och därmed också kunna använda next() och prev() osv...

Medlem sedan maj 2002647 inlägg
#6

Får man fråga vad du ska använda det till?

Medlem sedan maj 2001211 inlägg
#7

tja... ganska simpelt faktiskt...
jag har bla en gästbok där jag vill visa fem inlägg i taget med en bakåt knapp och en framåtknapp samt länkar till sida1...sida2...

Kanske finns bättre lösningar?

Annars är ovanstående rätt bra... lägg det i en egen array...=)

Medlem sedan maj 2002647 inlägg
#8

Njae... det tycker inte jag (observera att det endast är jag ;))
Det alternativet gör det nog ganska segt då du måste hämta alla inlägg först och sedan sortera ut dem... om du använder "mitt" exempel så hämtar du endast de rader du ska visa... det går nog snabbare kan jag tänka mig. Sök efter "pagin" här på wF så får du en hel del exempel att välja mellan.

Medlem sedan jan. 2000372 inlägg
#9

Ja, du ska ju klockrent titta på nyckelordet "LIMIT" för dina SQL-frågor... Hade du sagt vad du skulle ha det till från början hade vi kunnat hjälpa dig mycket snabbare. :)

t.ex:

SELECT * FROM guestbook ORDER BY tsCreated DESC LIMIT 0, 5

hämtar de fem senaste inläggen om du har ett automatiskt timestampfält som heter tsCreated. Sen kan du bara scripta så att du på nästa sida kör:

SELECT * FROM guestbook ORDER BY tsCreated DESC LIMIT 5, 5

...för att hämta de fem nästa inläggen.

135 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)