MySQL: Rand() & Limit; geeft niet gewenste resultaat

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dominique Geheim

Dominique Geheim

18/05/2006 21:18:00
Quote Anchor link
Goedenavond,

Ik heb een script gemaakt voor een aantal projecten van mij (kunnen fotoshoots zijn, websites, huisstijlen enz) en overal heb ik thumbs van.

Nu heb ik er een soort menu balk voor gemaakt waar hij dit laat zien. Ik echo de thumbnaam uit de database en die word klikbaar als link. Ik wil 3 verschillende thumbs laten zien (heb ruimte voor 3 gemaakt) Maar nu zit ik met het volgende:

Op de manier zoals ik het heb gedaan, laat hij dus elke keer 3 dezelfde thumbs zien, ververs ik de pagina, laat hij een andere afbeelding 3 keer zien.

Wat ik dus wil bereiken, is elke keer dat je ververst, dat je 3 andere thumbs op die posities krijgt.

Dit stukje code gebruik ik:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$sql
= "SELECT * FROM projecten ORDER BY RAND() LIMIT 3";
$result =mysql_query($sql);

while ($row = mysql_fetch_array($result)) {
?>


<div id="projectenoverzicht1"></div>
<div id="project-een"><img src="gfx/project_thumb/
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $row['thumb']; ?>
" /></div>
<div id="project-twee"><img src="gfx/project_thumb/
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $row['thumb']; ?>
" /></div>

<div id="projectenoverzicht2"></div>
<div id="project-drie"><img src="gfx/project_thumb/
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $row['thumb']; ?>
" /></div>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
}
?>


Die echo $row['thumb']; gebruik ik dus op 3 plaatsen, maar hij laat me nu op die 3 plaatsen elke keer 3 dezelfde plaatjes zien. Het moeten dus 3 verschillenden zijn :)

Opzich is het logisch dat hij nu 3 dezelfde thumbs laat zien, maar ik moet dus in elke div een andere thumb hebben.

Wie o wie geeft me het antwoord wat me verder helpt, hoe dit te doen.
 
PHP hulp

PHP hulp

16/11/2024 06:38:26
 
Jelle -

Jelle -

18/05/2006 21:26:00
Quote Anchor link
je zou:
- Alles kunnen selecteren
- In een array douwe
- Array door elkaar gooie
- 'eerste 3' weergeven
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
// Alles selecteren
$query = mysql_query("SELECT thumb FROM projecten");

// In een array douwe
$thumb = array();

while($row = mysql_fetch_assoc($query))
{

  $thumb[] = $row['thumb'];
}


// Array doorelkaar gooie
shuffle($thumb);

// Eerste 3 weergeven
echo "
<img src=\""
.$thumb[0]."\" alt=\"\" /><br />
<img src=\""
.$thumb[1]."\" alt=\"\" /><br />
<img src=\""
.$thumb[2]."\" alt=\"\" /><br />";

?>

Het is niet helemaal wat jij wilt <_<
Gewijzigd op 01/01/1970 01:00:00 door Jelle -
 
Willem vp

Willem vp

18/05/2006 23:07:00
Quote Anchor link
De manier van jordy is wel een eind in de goede richting, maar ik zou hem toch iets aanpassen. In dit geval wordt namelijk de hele database ingelezen en daarna worden er drie records uit gekozen. Da's best duur. Met een kleine aanpassing wordt 'ie veel efficiënter:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
$sql = "SELECT * FROM projecten ORDER BY RAND() LIMIT 3";
$result =mysql_query($sql);

while ($row = mysql_fetch_array($result)) {
   $thumb[] = $row['thumb'];
}
echo "
<img src=\"$thumb[0]\" alt=\"\" /><br />
<img src=\"$thumb[1]\" alt=\"\" /><br />
<img src=\"$thumb[2]\" alt=\"\" /><br />";
 
Dominique Geheim

Dominique Geheim

18/05/2006 23:13:00
Quote Anchor link
Heb beide manieren geprobeerd, en het werkt perfect! Echt super bedankt, want ik kwam er niet meer uit. Kan ik eindelijk verder gaan met het ontwikkelen van een link naar de projectpagina enz.

Plaatje word een link --> ik echo het id van de rij waar het plaatje instaat en op de projectpagina laat ik de info van de rij met dat id weergeven. Zet dus projectinformatie in de database.

Nu het wisselen van de thumbs is opgelost, is het weer een stuk leuker om verder te gaan :)
 
Jelle -

Jelle -

18/05/2006 23:42:00
Quote Anchor link
tof :D
handige functie RAND() btw.
die wist ik nog niet :-)
 
Frank -

Frank -

18/05/2006 23:52:00
Quote Anchor link
Waarom zet je 3x een $thumb, al dan niet met sleutel, in je code? Je gebruikt juist een while-loop om php zelfstandig alle data op het scherm te zetten. Stel dat jij de query aanpast naar 4 resultaten, loopt de rest van het script in de soep. Laat php het lekker zelf uitzoeken...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$sql
= "SELECT * FROM projecten ORDER BY RAND() LIMIT 3";
$result = mysql_query($sql);

// foutafhandeling inbouwen! Vroeg of laat gaat de query fout...

while ($row = mysql_fetch_array($result)) {
   echo '<img src="'.$row['thumb'].'" alt="" /><br />';
}

?>
 
Dominique Geheim

Dominique Geheim

19/05/2006 00:10:00
Quote Anchor link
@Frank: wat jij post, zoiets had ik ook, maar door mijn divs werkt dat niet (of ik doe iets gigantisch verkeerd).
 
Jelle -

Jelle -

19/05/2006 11:20:00
Quote Anchor link
Frank:
Waarom zet je 3x een $thumb, al dan niet met sleutel, in je code? Je gebruikt juist een while-loop om php zelfstandig alle data op het scherm te zetten. Stel dat jij de query aanpast naar 4 resultaten, loopt de rest van het script in de soep. Laat php het lekker zelf uitzoeken...


De reden waarom je het in een variable zet is omdat je het dan overal op de pagina kan neerzetten. (ook ver van elkaar dus) Dit gaat een beetje moeilijk worden als je het in een while lus zet ;-)

en als je 4 plaatjes ophaalt, dan laat hij de 4e nooit zien, en komt er ook geen fout. dit omdat $thumb[3] dan wel aangemaakt wordt. maar nooit wordt opgeroepen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.