Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Willekeurige verschillende record uitladen , MYSQL en PHP

Pagina: 1
Acties:

  • Finwiok
  • Registratie: December 2014
  • Laatst online: 15-03-2022
Beste leden van Tweakers,

Voor school ben ik bezig met een website te ontwerpen voor informatica, ik heb nu een probleem waar ik niet uitkom, het script moet 4 verschillende willekeurig gekozen records uit de database halen en deze omzetten naar een variabele zodat ik de 4 verschillende variabelen later kan gebruiken. Op het moment heb ik dit:

code:
1
2
3
4
5
6
7
8
9
10
<?php
$result = mysql_query("SELECT Album FROM albums ORDER BY  RAND() LIMIT 4;");
$row = mysql_fetch_array($result);
$random = $row['Album'];
$random2 = $row['Album'];
$random3 = $row['Album'];
$random4 = $row['Album'];


?>


Ik zou heel gelukkig worden als jullie mij verder kunnen helpen!

Alvast bedankt!

  • DirkZzZ
  • Registratie: September 2007
  • Laatst online: 19:59
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$connection = new PDO("mysql:dbname=databaseNaam;host=localhost", "dbGebruikersNaam", "dbWachtwoord");


$aantalAlbums = 4;

$sth = $connection->prepare("SELECT Album FROM albums ORDER BY  RAND() :aantalAlbums");
$sth->bindParam(':aantalAlbums', $aantalAlbums,  PDO::PARAM_INT);
$sth->execute();

/*
* $willekeurigeAlbumLijst bevat:
*  array( 0 => array('Album' => 'naamAlbum' ), 1 => array('Album' => 'andereNaamAlbum' ) )
*/
$willekeurigeAlbumLijst = $sth->fetchAll(PDO::FETCH_ASSOC);


Je kan over $willekeurigeAlumLijst heen lussen om je resultaten te gebruiken.
Voor de rest is het goed om jezelf niet aan te wennen om mysql_query te gebruiken aangezien deze deprecated is,
kies liever voor mysqli_query of PDO.

Wat betreft je het kunnen wijzigen van het cijfer 4, hiervoor kan je een simpelweg een variabele gebruiken zoals in het voorbeeldje hierboven.

leesvoer;
http://php.net/manual/en/ref.pdo-mysql.php
http://php.net/manual/en/book.mysqli.php
http://stackoverflow.com/...se-mysql-functions-in-php

  • Wasp
  • Registratie: Maart 2001
  • Laatst online: 16:39
Weet wel dat de MySQL RAND() functie voor veel rijen slechte performance geeft.

In de meeste gevallen kun je het beste de gehele dataset ophalen in bv. een PHP array, en middels PHP functies 4 willekeurige array values pakken. Gaat stukken sneller.

Ryzen 9 5900X, MSI Tomahawk MAX, 32GB RAM, Nvidia RTX 4070 Ti | Mijn livesets


  • incaz
  • Registratie: Augustus 2012
  • Laatst online: 15-11-2022
Wasp - de hele dataset ophalen is ook niet echt goed voor je performance. Betere oplossingen hier: http://jan.kneschke.de/projects/mysql/order-by-rand/

Als je het doet met een offset (en dus niet een id genereert - zie ook de comments op die pagina) kun je die bovendien op elke subset makkelijk toepassen - juiste index en het is een erg snelle query.

Never explain with stupidity where malice is a better explanation


  • Cartman!
  • Registratie: April 2000
  • Niet online
Wasp schreef op vrijdag 19 december 2014 @ 14:31:
In de meeste gevallen kun je het beste de gehele dataset ophalen in bv. een PHP array, en middels PHP functies 4 willekeurige array values pakken. Gaat stukken sneller.
Zodat je snel tegen memory limits aanloopt en het helemaal niks meer doet? Geen goed idee.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Wasp schreef op vrijdag 19 december 2014 @ 14:31:
Weet wel dat de MySQL RAND() functie voor veel rijen slechte performance geeft.

In de meeste gevallen kun je het beste de gehele dataset ophalen in bv. een PHP array, en middels PHP functies 4 willekeurige array values pakken. Gaat stukken sneller.
Suggereer je nu serieus dat uitgerekend bij een grote dataset de complete tabel in je geheugen inladen om er een handvol records uit te halen een beter idee is dan order by rand()? Dat daarop orderen niet heel performant is heb je goed maar je "oplossing" is erger dan het probleem. 8)7

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 18:12
Bij opleidingen wordt vaak 'de beste manier' als fout bestempeld. Dus in jouw geval (Er vanuit gaande dat het zo'n typische opleiding is) zal ik dit als oplossing voordragen (Ik weet het, don't blame me)

PHP:
1
2
3
4
5
6
7
8
9
<?php
$result = mysql_query("SELECT Album FROM albums ORDER BY  RAND() LIMIT 4;");
while ($row = mysql_fetch_array($result)) {
   echo $row['Album'];

}


?>

  • incaz
  • Registratie: Augustus 2012
  • Laatst online: 15-11-2022
RedHat schreef op zondag 21 december 2014 @ 00:29:
Bij opleidingen wordt vaak 'de beste manier' als fout bestempeld. Dus in jouw geval (Er vanuit gaande dat het zo'n typische opleiding is) zal ik dit als oplossing voordragen (Ik weet het, don't blame me)
Ik zou het goede doen, en de reden erachter zetten in de comments. En dan vragen stellen aan de docent als er commentaar op komt.

Never explain with stupidity where malice is a better explanation


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

...of desnoods beide manieren uitwerken en uitleggen welke beter is en waarom.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1