Avatar billede groyk Novice
31. januar 2009 - 15:22 Der er 4 kommentarer og
1 løsning

Select random until height>100

Hej eksperter

Hvordan laver jeg en forespørgsel der henter tilfældige data ud af MySQL indtil en sum af værdier i tabellen er over ex. 100?

Tabel
ID| URL | HØJDE
1|www.test.dk|14
2|www.test1.dk|28
osv.

Vil gerne hente random indtil højden overstiger 100.

Der må ikke outputtes samme linie 2 gange i en request.

Kan det overhovedet lade sig gøre i éen forespørgsel?
Avatar billede arne_v Ekspert
31. januar 2009 - 22:01 #1
Var det ikke en ide bare at hente i en random rækkefølge og lade applikationen stoppe
når summen var nået ?
Avatar billede groyk Novice
01. februar 2009 - 11:45 #2
Naturligvis. Det var også min første ide. Grunden til at jeg spurgte var at jeg ikke er en haj til avanceret SQL forespørgsler. Tror samtidig hvis det kan gøres i MySQL i stedet for php / asp / net whatever vil loadtiden være hurtigere eller?

Hvis jeg selecter RANDOM i MySQL, kan jeg så være sikker på at jeg ikke henter samme række flere gange? (Kan selvfølgelig også kontrolleres i applikationen)
Avatar billede arne_v Ekspert
01. februar 2009 - 15:48 #3
en SELECT ... ORDER BY RAND() vil aldrig hente samme række to gange.
Avatar billede groyk Novice
01. februar 2009 - 16:31 #4
OK takker

Bruger denne løsning.

Her er den fulde kode hvis nogle skulle være intereseret.

Koden er "Drupal kode"

<?php

$height = 800;

// Henter 30 rækker, så der i hvert fald er nok til at udfylde reklamesøjlen
$result =db_query('SELECT * FROM {content_type_sponsor} ORDER BY RAND() LIMIT 30');
while ($data = db_fetch_object($result)) {

$img = $data->field_logo_imceimage_path;
$url = $data->field_url_value;
$name =db_result(db_query('SELECT title FROM {node} WHERE nid=%d', $data->nid));
$h = $data->field_logo_imceimage_height;

// Viser banneret såfremt der er plads, (Jo større reklame, jo færre visninger!)
if($height>$h) {
print "<a href=\"http://$url\" target=\"_blank\"><img src=\"$img\" width=\"125\" alt=\"$name\" title=\"$name\"></a>";
$height = $height - $h;
print "$height<br/>";
}
}
?>
Avatar billede arne_v Ekspert
01. februar 2009 - 17:19 #5
så smider jeg et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester