[opgelost]MYSQL: Random number with limits.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kevin vdm

kevin vdm

07/01/2009 17:14:00
Quote Anchor link
ik heb nu deze mysql query:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
mysql_query("UPDATE `k` SET `f`='".$_POST['naam']."' WHERE `f`='' AND `o`='' AND `land`='".$data[land]."' AND `g_id`='1' ORDER BY `id` LIMIT 4");


Nu zit alles en database dat gerangschikt is van 1 tot 100(als vb).
als ik deze code uitvoer neemt hij automatisch de EERSTE 4 die voldoen aan de requirements.
Nu wil ik dat hij 4 willekeurige getallen neemt die voldoen aan de requirements.

Hoe doe ik dit?

Mvg, kevin
Gewijzigd op 01/01/1970 01:00:00 door Kevin vdm
 
PHP hulp

PHP hulp

25/11/2024 04:19:35
 
Joren de Wit

Joren de Wit

07/01/2009 17:19:00
Quote Anchor link
In een UPDATE query kun je geen ORDER BY gebruiken, dat zou ook erg onlogisch zijn. Met zo'n query update je de gegevens die voldoen aan jouw WHERE clausule (eventueel beperkt in aantal door de LIMIT).

Als je 4 random records wilt updaten zul je dus eerst het id van 4 random records moeten selecteren en dat vervolgens gebruiken in je update query. Dat kan overigens wel in 1 query en wel met een subquery:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
UPDATE tabel
SET ...
WHERE id IN
(
  SELECT id
  FROM tabel
  ORDER BY RAND()
  LIMIT 4
)
 
Kevin vdm

kevin vdm

07/01/2009 17:30:00
Quote Anchor link
Heel erg bedankt en een order by werkt perfect bij mij als ik het in mysql gebruik.

Mvg,
kevin
 
Joren de Wit

Joren de Wit

07/01/2009 17:39:00
Quote Anchor link
kevin schreef op 07.01.2009 17:30:
een order by werkt perfect bij mij als ik het in mysql gebruik.
Neemt niet weg dat het erg onlogisch is om dat in een UPDATE query te zetten. Hoe weet jij dan precies welke records aan die ORDER BY voldoen en welke er wel of niet geupdate zijn?
 
Eddy E

Eddy E

07/01/2009 19:09:00
Quote Anchor link
Je zou toch alleen de 4 meest recente (nieuwste / nieuwste DATETIME) willen updaten? (ipv alles ná een bepaalde datetime)
Dan is een ORDER BY in combinatie met een LIMIT prima te doen ;).
 
Joren de Wit

Joren de Wit

07/01/2009 19:16:00
Quote Anchor link
Volgens de SQL standaard hoor je dat dan met een SELECT subquery in combinatie met IN() te doen. Een ORDER BY hoort imo gewoon niet thuis in een UPDATE query...
 



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.