qualitum logo
Snabbt eller segt?

PHPportalen Forum Index » Databaser
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
Colandus



Medlem i: 1974 dagar
Från: Stockholm/Haninge
Status: Offline



#721702
Inlägg Skrivet: 2012-03-16 03:42      Ämne: Snabbt eller segt? Citera

Hejsan... Ett tag sen man var här!


Min fråga är, om denna SQL query är seg ?

KOD:
1:
 
2:
$aquery = mysql_query('SELECT COUNT(`id`) FROM `users` WHERE priority = 1');
3:
$query = mysql_query('SELECT `id` FROM `users` WHERE `priority` = 1 LIMIT ' . rand() * mysql_result($aquery, 0) . ', 1');
4:
 


Det den gör är att ta fram ett slumpmässigt värde ur tabellen genom att först räkna hur många av dessa det finns och att genom det värdet använda den i LIMIT för att välja den slumpade raden.

Är detta ett effektivt sätt? Om inte, ge gärna förslag på hur det bör lösas!


Tack i förhand,
Colandus
 

_________________
فحف
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Kottizen



Medlem i: 1999 dagar

Status: Offline



#721739
Inlägg Skrivet: 2012-03-18 02:10      Ämne: Citera

SELECT [...] ORDER BY RAND() LIMIT 0,1

...går annars
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Skicka e-post Besök användarens hemsida
Colandus



Medlem i: 1974 dagar
Från: Stockholm/Haninge
Status: Offline



#721757
Inlägg Skrivet: 2012-03-19 02:29      Ämne: Citera

Det är hemskt trögt har jag hört! :p
 

_________________
فحف
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
md2perpe
Ex-Moderator



Medlem i: 3740 dagar
Från: Hallonbergen, Kungsbodarna
Status: Offline



#721954
Inlägg Skrivet: 2012-03-24 18:52      Ämne: Citera

Lägg till en kolumn rand_order i tabellen users. Lägg till ett index på kolumnen. Sätt in ett slumpmässigt värde i kolumnen för varje post (i fortsättningen lämpligen vid insättning av ny user).

Varje gång du vill ha en slumpmässig user, slumpa fram ett tal och hitta posten med närmast högre värde i rand_order. (Om ingen post med högre värde hittas, hämta posten med lägst värde.)
 

_________________
6 + sqrt(64) = 10
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » Databaser
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic
qualitum logo