[php/mysql] statement -> statische rand()

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Kleine uitleg over de tabel die ik heb in mijn db, naam is 'autos'. In deze tabel staat een kolom met de naam hits.

Stel er staan 400 rijen in.
50 van deze rijen hebben wel eens een hit gehad, en die velden bevatten een waarde van varierend van 1 tot 50, ik noem maar wat.

Als ik nou de rijen ga laten zien met en statement als:

PHP:
1
$query = "SELECT * FROM autos ORDER BY hits DESC";


.. dan worden ze geselecteerd van hoog naar laag. Alleen probleem is dan dat hij de rijen die gelijk zijn (waar hits dus == 0 is) dan gaat laten zien aan de hand van de datum van toevoeging omdat ze niet van elkaar verschillen wat de waarde betreft.
Hoe kan ik nu de rijen laten zien dat de rij met de meeste hits bovenaan staat en dan afloopt, en dat alle rijen die hits==0 hebben gewoon random worden weergeven? Dat lukt op zich wel, maar dan wil ik dat die randomizing wel elke keer hetzelfde is, zodat elke gebruiker dezelfde random te zien krijgt!

Ik hoop dat het duidelijk is. Ik wist niet goed hoe ik het uit moest leggen... :)
Ik weet van het bestaan van rand() af, maar zeker niet hoe ik dat moet gebruiken in dit geval.

De oplossing die ik zelf al bedacht heb is iets als:

PHP:
1
2
3
$query = "SELECT * FROM autos WHERE hits > 0 ORDER BY hits DESC";
// en dan daarna:
$query = "SELECT * FROM autos WHERE hits = 0 ORDER BY rand()";


..alleen als ik dan de pagina ververs, dan is er een heel andere randomize, en die moet nou juist steeds hetzelfde zijn.

[ Voor 5% gewijzigd door Verwijderd op 12-06-2003 15:45 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Wat mij logisch lijkt is dat je een ORDER BY name doet, of merk, wat je in je tabel hebt staan. Dus iets als ORDER BY hits DESC, naam. Als je geen ORDER BY doet laat je de volgorde bepalen door je database en ja, dat kan wel eens anders zijn.

[ Voor 30% gewijzigd door Verwijderd op 12-06-2003 15:51 ]


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Je spreekt jezelf erg tegen, je wilt de boel randomizen, maar eigenlijk niet randomizen... Dan moet je het dus niet randomizen ;)

Sorteren op twee velden:
ORDER BY hits DESC, name

oid lijkt me handiger.

En als je perse een random waarde wilt, dan zul je een veld moeten toevoegen en iets als:
update tabel set randomveld = rand();

moeten doen.

Acties:
  • 0 Henk 'm!

  • Banpei
  • Registratie: Juli 2001
  • Laatst online: 25-10-2022

Banpei

Hachiroku on this touge?

Je kan het dus ook in een query doen:
PHP:
1
$query = "SELECT * FROM autos ORDER BY hits DESC, rand()


Dan worden ook diegenen die gelijk aantal hits hebben ook gerandomized. ;)

[ Voor 5% gewijzigd door Banpei op 12-06-2003 15:56 ]

AE86 gevonden! | So what I thought I'd do was, I'd pretend to be one of those deaf-mutes.