Gå til innhold

hjelp til en SQL-spørring


Anbefalte innlegg

Trenger hjelp til å sette opp en mysql-spørring :roll:

 

Tabell album col id og tillatelser value 1,2 eller 3.

 

Tabell bilder col album og url (col album viser til unik album.id )

 

Henger du med så langt? I såfall: :love:

 

Here it goes: Jeg vil velge random bilder.url, men kun velge blant bildene som er registrert i album.tillatelser som 1.

 

Anyone? :hmm:

Lenke til kommentar
Videoannonse
Annonse

Er langt fra noen ekspert på SQL, men ville tro du kunne løse det på denne måten.

 

"SELECT bilder.url WHERE bilder.album = album.id AND album.tillatelser = 1"

 

Ville ikke forundre meg om Mysql har en eller annen funksjon for random shuffling.

Men resten bør du kunne gjøre i PHP nå.

Lenke til kommentar

Det er veldig avhengig av hvor mange rader det er i tabellen. Dersom det er få rader kan du bruke ORDER BY RAND() og sette inn LEFT JOIN for å få med begge tabellene og begrenser til kun der tilatelsen er 1 med WHERE.

 

Det fungerer dårlig dersom du har over et par tusen rader, den slik spørring vil ta over et minutt dersom det er nærmere 100 000 rader.

 

Dersom der er under 20 000 rader er det ikke noe problem å hente alle radene med en vanlig LEFT JOIN og WHERE der tillatelse er 1. Og så bare velge en tilfeldig i PHP. Når tabellen nærmere seg 100 000 rader vil også det scriptet bli litt tregt, for da blir det litt mange variabler. (antallet rader er selvfølgelig avhengig av antall felter ol. i databasen).

 

Edit:

ikke shuffle resultatet, da er det bedre å bruke rand() til å finne et tilfeldig tall dersom databasen er stor.

Endret av ????????
Lenke til kommentar
Så telle radene med mysql_num_rows og bruke rand() for å hente ut en tilfeldig rad vil være mer effektivt?

Helt avhengig av størrelse, eventuelt bruke count() eller en egen spørring for å telle - myisam tabeller har alltid oversikt over antallet rader så det er en rask spørring.

Lenke til kommentar

Den slår sammen de to tabellene, slik at de behandles som "en" tabell, dvs. henter verdier fra de begge. Da definerer du hva som linker de sammen, slik at mysql vet hvilke rader i tabellene som skal kobles sammen.

 

Edit:

Her er et lite eksempel

 

SELECT * FROM tabell_1 LEFT JOIN tabell_2 ON tabell_1.id = tabell_2.koble_felt

 

Da vet sql serveren at den raden der tabell_1.id hører sammen med den raden i tabell_2 hvor koble_felt er det sammen som tabell_1.id. Left join er ofte å foretrekke for den henter hvis det finnes en match.

Endret av ????????
Lenke til kommentar

Jeg vil teste, har lekt meg litt med join i natt :p

SELECT bilder.url FROM bilder JOIN album ON bilder.album = album.id WHERE tilatelser = '1' ORDER BY RAND() LIMIT 1

*håpe veldig på*

 

takk ????????, glemte meg litt :blush:

Endret av LoS
Lenke til kommentar
Den slår sammen de to tabellene, slik at de behandles som "en" tabell, dvs. henter verdier fra de begge. Da definerer du hva som linker de sammen, slik at mysql vet hvilke rader i tabellene som skal kobles sammen.

Har du url til et eksempel som viser i praksis hva funksjonen gjør? :)

Lenke til kommentar

En query for å hente en tilfeldig record med riktige tillatelser:

$query = "SELECT * FROM bilder.url WHERE album.id = ROUND(RAND() * $antall) AND album.tillatelser = 1";

 

Siden den er tilfeldig, er det ikke sikkert den returnerer et svar, så kjør denne:

while (!($restult = query_mysql($query))) { // Ikke gjør noe her, venter til vi har en record som er fylt med data
}

// Hent ut data og vis på siden her

 

 

Dette bør funke tror jeg :)

 

 

-f-

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...