Avatar billede subit Nybegynder
22. februar 2006 - 15:58 Der er 9 kommentarer

Random, men kun 1 gang?

Hej allesammen.

Jeg bruger denne her kode til at finde en random i min db

$foresp = mysql_query("SELECT * FROM TABEL WHERE id between 1 AND 10 ORDER BY RAND() LIMIT 1") or (mysql_error());
while($data = mysql_fetch_array($foresp)){

echo $data[id];

Med når jeg skriver den flere forskellige steder kan det være der kommer det samme id flere gange, det må kun komme engang selvom jeg kopiere koden 5 forskellige steder. Hvordan gør jeg det ?
Avatar billede jakobdo Ekspert
22. februar 2006 - 16:27 #1
Så skal du lave f.eks. et array hvor du gemmer tallet, og så næsten gang du laver et udtræk, så skal du trække data ud WHERE id NOT IN (de tal vi har brugt)
Avatar billede subit Nybegynder
22. februar 2006 - 16:49 #2
okay kendte ikk lige den NOT IN og det virker faktisk meget smart. Men hvordan udarbejder jeg det med arrays så den gemmer? kan du evt. vise et eksempel?
Avatar billede jakobdo Ekspert
22. februar 2006 - 16:54 #3
Jeg ville lave det sådan her:

$huskID = array();

$foresp = mysql_query("SELECT * FROM TABEL WHERE (id between 1 AND 10) AND ID NOT IN (".implode(",",$huskID).")ORDER BY RAND() LIMIT 1") or (mysql_error());
while($data = mysql_fetch_array($foresp))
{
$huskID[] = $data[id];
echo $data[id];
}
Avatar billede subit Nybegynder
22. februar 2006 - 17:11 #4
Den virker ikke? :(

den siger:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ***** on line 51
Avatar billede subit Nybegynder
22. februar 2006 - 17:26 #5
Det er det her der er fejl med:

AND ID NOT IN (".implode(",",$huskID).")

Hvorfor?
Avatar billede jakobdo Ekspert
22. februar 2006 - 18:23 #6
Problemet er at første gang er arrayet tomt, det kan den ikke finde ud af.
Tilføj et id som du ved ikke findes, f.eks. 0

$huskID = array(0);

Se evt min test kode her: http://www.codebreaker.dk/exp/690117.php
Avatar billede subit Nybegynder
22. februar 2006 - 18:48 #7
mange tak og tak for den gode forklaring. lav venligst svar.
Avatar billede jakobdo Ekspert
22. februar 2006 - 18:50 #8
Svar!
Avatar billede jakobdo Ekspert
22. februar 2006 - 19:02 #9
Man kunne jo også trække alle 5 ud på en gang:
SELECT * FROM TABEL WHERE id between 1 AND 10 ORDER BY RAND() LIMIT 5
Og så indlæse dem i et array og bruge nummer 1, 2, 3, 4 osv igennem koden.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester