Gå til innhold

hjelp til en SQL-spørring


Anbefalte innlegg

Skrevet

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:

Videoannonse
Annonse
Skrevet

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å.

Skrevet (endret)

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 ????????
Skrevet

hmz... (kult med et innlegg som engasjerer ;)) Mer presist, hva gjør egentlig shuffle? I manualen står det at " This function shuffles", hva vil det si?

Skrevet (endret)

Dersom WHERE tillatelse er 1 begrenser bra, eller du indekserer så kan du bruke ORDER BY RAND() på tabeller med et par hundre tusen rader. Da slipper du å lage egen php kode også.

Endret av ????????
Skrevet
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.

Skrevet (endret)

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 ????????
Skrevet (endret)

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
Skrevet
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? :)

Skrevet

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-

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...