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

[PHP] Functie levert geen random resultaten op

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Hallo, mijn kennis van PHP is zeer beperkt en dat breekt me nu op. Daarom zou ik jullie hulp in willen roepen. Ik beheer een site met op een bepaalde pagina een random lijst met resultaten uit een database, tenminste, het zou een random lijst moeten zijn, maar ik krijg elke keer de zelfde resultaten. De pagina roept een functie

code:
1
2
3
4
5
6
7
8
9
10
11
12
function getTopList($numberItems, $nonArchived = true, $itemName = null)
    {
        if ($this->isArchiveable())
        {
            $query = $nonArchived ? $this->getNonArchivedListQuery($itemName) : getArchivedListQuery($itemName);
        }
        else
        {
            $query = $this->getListQuery($itemName);
        }
        $query->setTop($numberItems);
        return $query->execute();


Ik roep hier de lijst aan:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$featuredList = $featuredMaterialModule->getTopList(10);

if (!$featuredList->isEmpty())
        { ?>
        
            <h2>Featured items:</h2>
        
            
            <table cellspacing="0" cellpadding="0">
                <tr class="heading">
                    <td class="label">Category</td>
                    <td class="value">Type</td>
                    <td class="unit">Item</td>
                </tr>
<?              while ($featuredItem = $featuredList->skip())
                {
                    $item = $featuredMaterial->getTargetRecord("featureditem");
                    $category = $material->getTargetRecord("category");
                    $type = $material->getTargetRecord("itemtype");
                 ?> <tr>
                        <td><? $category->toHTML("name"); ?></td>
                        <td><? $type->toHTML("name"); ?></td>
                        <td><a href="<?= $item->getURL(); ?>"><? $material->toHTML("name"); ?></a></td>
                    </tr>
<?              } ?>
            </table>


De functie creëert een lijst, maar hoe pas ik deze aan zodat ik random resultaten krijg? Alvast bedankt voor jullie reacties

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Wat heb je zelf al geprobeerd? Dit topic is anders niet veel meer dan een scriptrequest / Kan iemand even...? en zoals je zult lezen doen we daar niet aan hier ;)

Ik zie dat je nieuw bent, dan is het ook handig om onze Quickstart ook even door te nemen voor een volgende keer dat je een topic opent; dan zie je meteen wat we hier verwachten van een topicstart ;)

[ Voor 74% gewijzigd door RobIII op 22-08-2011 18:58 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
Hallo RobIII,
Ik begrijp het. Ik heb geprobeerd of ik met de functie shuffle de query resultaten kon herschikken, maar ik krijg dan foutmeldingen. Ik begrijp niet goed hoe ik deze functie moet toepassen

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

NMe

Quia Ego Sic Dico.

Array_shuffle aanroepen op iets dat geen array van resultaten is maar (zo te zien) een soort van gelinkte lijst gaat niet werken natuurlijk. Het hangt er sowieso vanaf wat je bedoelt met "random resultaten". Bedoel je enkel de volgorde? Of wil je echt compleet andere data ophalen?

Het zal ongetwijfeld het handigst zijn om je query te herschrijven, maar die staat niet in de code die je hier geplakt hebt.

'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.


Verwijderd

Topicstarter
Ik heb zo'n 700 items in een database en wil elke keer dat de pagina geladen 10 random resultaten, uit die set van 700, in een tabel tonen.

Verwijderd

Topicstarter
Ik ben overigens wel bang dat het herschrijven van de query invloed heeft op een tiental functies... dat zou balen zijn

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

NMe

Quia Ego Sic Dico.

Dan zul je een functie moeten schrijven die hetzelfde soort data teruggeeft met een andere query. De quick 'n dirty-manier zou zijn om gewoon de functie te copy/pasten en daarin alleen de naam en de query aan te passen. De rest van je code kan dan gewoon de "oude" functie blijven gebruiken terwijl je voor dit ene doel je andere functie vrij doorzichtig in je code kunt pluggen.

'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.


  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Verwijderd schreef op maandag 22 augustus 2011 @ 19:12:
Ik heb zo'n 700 items in een database en wil elke keer dat de pagina geladen 10 random resultaten, uit die set van 700, in een tabel tonen.
Weet je zeker dat je dit wilt. Meeste dbms'en bieden wel ondersteuning voor iets als : order by rand(). Dan hoef je qua code niets aan te passen (enkel je resultset wordt random gesorteerd hij verandert niet)
Maar dan krijg je dus echt (tenminste computerrandom echt) random resultaten, oftewel 1 record kan best altijd in beeld zijn terwijl een ander record nooit getoond wordt.

In de praktijk zie ik dan ook nooit behoefte aan echte random functies, enkel gewogen functies met een random element in het laatste stukje.

Verwijderd

Topicstarter
Ik denk dat ik het ga proberen met een extra functie. Ik denk dat dit dan inderdaad niet op te lossen is met de bestaande functie.
Ik zie geen bezwaar tegen een 'echte' random functie. Als de wet van de grote aantallen maar zijn werk doet. Voor mij is het belangrijkste dat de lijst wijzigt elke keer dat deze aangeroepen wordt. Ik laat jullie weten of het me lukt.

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

NMe

Quia Ego Sic Dico.

Verwijderd schreef op maandag 22 augustus 2011 @ 21:05:
Ik denk dat ik het ga proberen met een extra functie. Ik denk dat dit dan inderdaad niet op te lossen is met de bestaande functie.
Oh jawel hoor, maar gebaseerd op jouw eerste post wilde ik je daar in de eerste instantie niet doorheen praten. :P Vandaar ook dat ik de quick 'n dirty-oplossing ook quick 'n dirty noemde. :+

Een iets nettere oplossing zou zijn door de bestaande functie uit te breiden met één extra parameter ($isRandom) met een default waarde van false zodat je hem niet verplicht hoeft op te geven. Vervolgens in de functie zelf de query een ORDER BY RAND() geven als de waarde van $isRandom true is, en anders gewoon de sortering die de functie nu gebruikt. Op die manier dupliceer je geen code en blijft alsnog ook de oude code werken. ;)

'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.


  • Nactive
  • Registratie: Juni 2011
  • Niet online
Welk dbms gebruik je ? Want zoals Gomez12 zegt zou ik dit ook proberen op te lossen in mijn query.

nvm had niet heel topic gelezen
Verwijderd schreef op maandag 22 augustus 2011 @ 19:12:
Ik ben overigens wel bang dat het herschrijven van de query invloed heeft op een tiental functies... dat zou balen zijn

[ Voor 58% gewijzigd door Nactive op 22-08-2011 23:21 ]

Pagina: 1