[MySQL] Random record werkt niet online

Pagina: 1
Acties:
  • 158 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • PluueeR
  • Registratie: December 2000
  • Laatst online: 19-09 10:58
Ik heb een query die online niet werkt terwijl deze het lokaal wel doet.

Deze query moet random 1 record uit de tabel halen. In de search vond ik dat dit te maken kan hebben met de MySQL versie die minimaal 3.23 moet zijn. De server voldoet aan deze eisen.

Ik heb het ook vanuit phpMyAdmin geprobeerd en daarvanuit werkt het wel.

Dit is mijn query:

PHP:
1
$Mysql = mysql_query("SELECT * FROM frontpage_picture ORDER BY RAND() LIMIT 1");

Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 19-09 09:34

thomaske

» » » » » »

Define "werkt niet"..

[ Voor 41% gewijzigd door thomaske op 20-01-2003 11:29 ]

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
misschien domme vraag, maar heb je wel db connectie?

Acties:
  • 0 Henk 'm!

  • PluueeR
  • Registratie: December 2000
  • Laatst online: 19-09 10:58
Ik heb wel degelijk een db connectie. Ik krijg ook data uit mijn database. Alleen elke keer dezelfde en niet random. Terwijl dat lokaal geen probleem is.

Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 19-09 09:34

thomaske

» » » » » »

PluueeR schreef op 20 januari 2003 @ 11:34:
Ik heb wel degelijk een db connectie. Ik krijg ook data uit mijn database. Alleen elke keer dezelfde en niet random. Terwijl dat lokaal geen probleem is.
Ok, maar je zegt dat het online met phpMyAdmin wel lukt. Dan is er dus geen probleem met de mysql of php-versie. Ik zou je code eens goed nakijken...

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

Verwijderd

[ook dom!]Heb je meer dan 1 rij in je db?[/ook dom!]

Acties:
  • 0 Henk 'm!

  • PluueeR
  • Registratie: December 2000
  • Laatst online: 19-09 10:58
Ik heb er 2 :) en elke keer krijg ik dezelfde terug.

Acties:
  • 0 Henk 'm!

  • KorZijl
  • Registratie: December 2002
  • Laatst online: 30-11-2021

KorZijl

errare humanum est

PluueeR schreef op 20 januari 2003 @ 11:44:
Ik heb er 2 :) en elke keer krijg ik dezelfde terug.
Tja, bij 2 keuzemogelijkheden is het natuurlijk goed mogelijk dat je heel vaak dezelfde terugkrijgt. Beetje speling van het lot, zeg maar toeval ;)
Probeer eens wat meer dan 2 keuzes te creeeren, dan sluit je toeval namelijk uit.

Acties:
  • 0 Henk 'm!

  • PluueeR
  • Registratie: December 2000
  • Laatst online: 19-09 10:58
Maar goed, na zown 40 refreshes moet ik toch 1x die ander krijgen? :)

Maar goed ik zal er nog eens twee bij doen.

Acties:
  • 0 Henk 'm!

Verwijderd

Hmmz. Das raar. Wat je wel kunt doen is iets ranzigs zoals dit:

PHP:
1
2
3
4
5
6
$result = mysql_query("select id from frontpage_picture");
$max = mysql_num_rows($result);
#srand geblaat

$id = rand(1,$max);
$query = "SELECT * FROM frontpage_picture WHERE ID='".$id."'";


ofzoiets

Acties:
  • 0 Henk 'm!

  • mjax
  • Registratie: September 2000
  • Laatst online: 10:03
Moeten random functies niet geinitialiseerd worden met een seed (bijvoorbeeld gebaseerd op de systeemtijd) om willekeurige waardes terug te geven?

Acties:
  • 0 Henk 'm!

Verwijderd

ja, maar ik had geen zin om dat op te zoeken. #srand geblaat is die regel code dus zeg maar

Acties:
  • 0 Henk 'm!

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

Banpei

Hachiroku on this touge?

Probeer eens de oude methode:
code:
1
select id, id*0+rand() as randomizer from your_table order by randomizer limit 1;

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


Acties:
  • 0 Henk 'm!

  • KorZijl
  • Registratie: December 2002
  • Laatst online: 30-11-2021

KorZijl

errare humanum est


Acties:
  • 0 Henk 'm!

  • PluueeR
  • Registratie: December 2000
  • Laatst online: 19-09 10:58
Ik heb nu ;

[php]
SELECT * FROM frontpage_picture ORDER BY RAND(NOW()) LIMIT 1
[/php

Ik krijg nu dus wel een ander record, maar wel steeds dezelfde bij elke refresh.

Acties:
  • 0 Henk 'm!

Verwijderd

ook met ctrl-f5 (cache leeg)?

Acties:
  • 0 Henk 'm!

  • PluueeR
  • Registratie: December 2000
  • Laatst online: 19-09 10:58
Dat maakt niet uit. Die eerste link van KorZijl omschrijft precies hetzelfde probleem als ik heb.

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 19-09 22:18

chem

Reist de wereld rond

Je weet dat order by rand() pas vanaf een bepaalde mysql versie werkt?
In MySQL Version 3.23, you can, however, do: SELECT * FROM table_name ORDER BY RAND()

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • PluueeR
  • Registratie: December 2000
  • Laatst online: 19-09 10:58
Ik heb een oplossing:

PHP:
1
2
3
$randomseed = rand();
    
$Mysql = mysql_query("SELECT * FROM frontpage_picture ORDER BY RAND($randomseed) LIMIT 1");


Dit lijkt vooralsnog goed te werken.

Acties:
  • 0 Henk 'm!

  • PluueeR
  • Registratie: December 2000
  • Laatst online: 19-09 10:58
Maar dit werkt lokaal dan niet meer :(

Maar goed, als het online maar werkt.

Verwijderd

PluueeR schreef op 20 januari 2003 @ 12:42:
Ik heb een oplossing:

PHP:
1
2
3
$randomseed = rand();
    
$Mysql = mysql_query("SELECT * FROM frontpage_picture ORDER BY RAND($randomseed) LIMIT 1");


Dit lijkt vooralsnog goed te werken.
offtopic:
Even een kick van bijna een jaar omdat ik m'n aanvullende vraag hierbij wel vond passen na het zoeken...

Ik wil 10 records uit een tabel en dat werkt prima met bovenstaande oplossing: Eerst een random getal in php maken en die als seed voor de rand() van mysql gebruiken.
(Een rand(now()) in mysql levert wel een beetje random records op, maar er zijn er bij die heel vaak weer komen en anderen die nooit aan de beurt zijn.)

Ik wil nu ook graag het resultaat in dezelfde query sorteren op alphabet.
Dus zoiets als:
code:
1
SELECT naam (FROM namentabel ORDER BY RAND($randomseed) LIMIT 10) ORDER BY naam
Maar ik kan dus niet vinden hoe het wel zou kunnen.
(Mijn wel werkende, maar niet gewenste oplossing (in dit voorbeeld goed genoeg omdat het maar 10 records zijn) is om het resultaat in php als array te sorteren.)

  • bigben04
  • Registratie: December 2001
  • Laatst online: 30-08 20:47
code:
1
SELECT naam FROM namentabel ORDER BY RAND($randomseed), naam LIMIT 10

Volgens mij moet het zo kunnen.
edit: duh, nee dit gaat niet werken :o, het is op deze manier niet op naam gesorteerd. Mogguh...

Welke MySQL versie heb je? Als het 4.1 of hoger is kan je namelijk een subselect gebruiken en dan wordt het zoiets als:
code:
1
SELECT naam FROM namentabel WHERE naam IN (SELECT naam FROM namentabel ORDER BY RAND($randomseed) LIMIT 10) ORDER BY naam

[ Voor 69% gewijzigd door bigben04 op 27-11-2003 10:05 ]


Verwijderd

Welke MySQL versie heb je? Als het 4.1 of hoger is...
Nee, 3.23.55 draait bij m'n hostingprovider. Dus subselecten gaat niet.

  • bigben04
  • Registratie: December 2001
  • Laatst online: 30-08 20:47
Verwijderd schreef op 27 november 2003 @ 10:32:
Nee, 3.23.55 draait bij m'n hostingprovider. Dus subselecten gaat niet.
Dan is het volgens mij niet in 1 query te doen en zal je toch het array in PHP moeten sorteren.

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Niet echt netjes, maar je zou het dmv PHP (of elke andere taal..) ook kunnen sorteren. :?

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.

Pagina: 1