webForumDet fria alternativet

Hämta 30 st slumpvis valda poster ur en databas?

Databaser & SQL

9 svar · 376 visningar · startad av Poppe25

Medlem sedan apr. 2002255 inlägg
Frågan#1

Hur gör man när man ska hämta slumpvis 30 st valda poster ur en databas? Ett sätt är förstås att hämta upp alla poster med select * from tabell, men om man redan i sqlfrågan vill slumpa fram 30 st poster så att dessa är de enda man hämtar upp, hur gör man då?

Databasposterna ser ut som följer:

id int() "Primärnyckeln"
quiz varchar()

Medlem sedan juni 200032 967 inlägg
#2

Det beror på vad du använder för dbms. För SQL Server kan det se ut så här:

SELECT TOP 30 * FROM tabellen ORDER BY newid()

Mvh

Medlem sedan apr. 2002255 inlägg
#3

Anropet sker via php till en MySQL-server. Koden som du föreskagit: exakt vad gör den? Slumpar den fram 30 nya poster varje gång man använder frågan?

Medlem sedan juni 200032 967 inlägg
#4

Ja, den slumpar fram 30 poster varje gång den körs. Dock fungerar den inte i MySQL, en sådan fråga borde se ut så här:

SELECT * FROM tabellen ORDER BY rand() LIMIT 30

Ungefär. Jag använder inte MySQL, så jag är inte säker, men det kanske får dig iväg en bit på vägen.

Mvh

Medlem sedan apr. 2002255 inlägg
#5

Tack för så snabbt svar! Jag ska strax prova den.

Känner du till förresten om det kan uppstå problem om man har en textfil liggandes på en server, när klienter läser och skriver ifrån den. Kan det uppstå problem med att någon skriver samtidigt som någon annan läser ifrån den?

Jag skriptar i php som sagt och det är inte så viktigt att alla som läser ifrån filen alltid får senaste innehållet.

Medlem sedan juni 200032 967 inlägg
#6

Jag kan inte svara på din filfråga, men det finns det säkert någon annan som kan. Prova att ställa den frågan i PHP-forumet.

Fick du din SQL-fråga att fungera?

Mvh

Medlem sedan juni 20014 290 inlägg
#7

Att plocka fram ett slumpmässig post ur en mysql-tabel, så gör man som @nders skrev, jag använder följande fråga för att plocka fram ett slumpmässig historia på min saijt:

$query="select * from historier,hist_type where historier.typ=hist_type.id order by rand() limit 1";

När det gäller PHP och fillåsning så kan du tiltta på flock() funktionen: http://www.se.php.net/manual/en/function.flock.php

Medlem sedan apr. 2002255 inlägg
#8

"@nders: Fick du din sqlfråga att fungera?"

Jotack, den fungerade utmärkt. Tack för hjälpen.

Medlem sedan juni 200032 967 inlägg
#9

Bra att det fungerade.

Lycka till med resten. :)

Mvh

Medlem sedan dec. 2003244 inlägg
#10

Är det någon som vet hur man gör detsamma i pgSQL?

263 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)