Gilbert Skrevet 21. juli 2004 Del Skrevet 21. juli 2004 Trenger hjelp til å sette opp en mysql-spørring 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: Here it goes: Jeg vil velge random bilder.url, men kun velge blant bildene som er registrert i album.tillatelser som 1. Anyone? Lenke til kommentar
Blodhemn Skrevet 21. juli 2004 Del Skrevet 21. juli 2004 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
Lokaltog Skrevet 21. juli 2004 Del Skrevet 21. juli 2004 SELECT * FROM bilder.url WHERE album.id = ROUND(RAND() * $antall) AND album.tillatelser = 1 Eller noe sånt..? Lenke til kommentar
Blodhemn Skrevet 21. juli 2004 Del Skrevet 21. juli 2004 (endret) Kan bruke shuffle() på mysql_fetch_array og velge ut $rad[0] ellerno. Endret 21. juli 2004 av Blodhemn Lenke til kommentar
Lokaltog Skrevet 21. juli 2004 Del Skrevet 21. juli 2004 Kan bruke shuffle() på mysql_fetch_array og velge ut $rad[0] ellerno. Godt poeng.. Særlig fordi spørringen min ikke alltid vil returnere et resultat.. Lenke til kommentar
???????? Skrevet 21. juli 2004 Del Skrevet 21. juli 2004 (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 21. juli 2004 av ???????? Lenke til kommentar
Gilbert Skrevet 21. juli 2004 Forfatter Del Skrevet 21. juli 2004 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? Lenke til kommentar
???????? Skrevet 21. juli 2004 Del Skrevet 21. juli 2004 Shuffle, stokke - på samme måte som når du stokker kort. Lenke til kommentar
???????? Skrevet 21. juli 2004 Del Skrevet 21. juli 2004 (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 21. juli 2004 av ???????? Lenke til kommentar
Blodhemn Skrevet 21. juli 2004 Del Skrevet 21. juli 2004 Så telle radene med mysql_num_rows og bruke rand() for å hente ut en tilfeldig rad vil være mer effektivt? Lenke til kommentar
???????? Skrevet 21. juli 2004 Del Skrevet 21. juli 2004 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
Lokaltog Skrevet 21. juli 2004 Del Skrevet 21. juli 2004 Så i en vanlig tabell vil SELECT * FROM bilder.url WHERE bilder.album = album.id AND album.tillatelser = 1 ORDER BY RAND() funke fint? Lenke til kommentar
???????? Skrevet 21. juli 2004 Del Skrevet 21. juli 2004 Du burde sette opp en join også! Lenke til kommentar
Lokaltog Skrevet 21. juli 2004 Del Skrevet 21. juli 2004 Du burde sette opp en join også! Jeg er sikkert enda mer nysgjerrig enn trådstarter, kan du være så snill å fortelle meg hva en JOIN gjør? Lenke til kommentar
???????? Skrevet 21. juli 2004 Del Skrevet 21. juli 2004 (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 21. juli 2004 av ???????? Lenke til kommentar
LoS Skrevet 21. juli 2004 Del Skrevet 21. juli 2004 (endret) Jeg vil teste, har lekt meg litt med join i natt 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 Endret 21. juli 2004 av LoS Lenke til kommentar
Lokaltog Skrevet 21. juli 2004 Del Skrevet 21. juli 2004 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
Blodhemn Skrevet 21. juli 2004 Del Skrevet 21. juli 2004 SELECT bilder.url FROM bilder LEFT JOIN album ON album.id = bilder.album WHERE album.tillatelser = 1 ? Lenke til kommentar
???????? Skrevet 21. juli 2004 Del Skrevet 21. juli 2004 (endret) LOS: LIMIT 1 lokaltok: skrev litt mer i posten ovenfor Ta ellers en liten kikk i manualen, der får du den infoen du trenger. EDIT: her er en bra link http://www.devshed.com/c/a/MySQL/MySQL-Table-Joins/ Endret 21. juli 2004 av ???????? Lenke til kommentar
fran Skrevet 21. juli 2004 Del Skrevet 21. juli 2004 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå