26. oktober 2005 - 18:48Der er
17 kommentarer og 1 løsning
Liste alle personer i Mysql tabel sammen med random picture
Hejsa.
Jeg har en database med 2 tabeller. 1 tabel med users 1 tabel med filer
Alle personerne i "users" har unikt "userid".
De forskellige personer har flere billeder liggende i "filer"-tabellen. I "filer" er der også et "userid" felt, så jeg kan se hvilke billeder der hører til hvem.
Er det muligt at lave en liste med alle de personer der findes i "users" og så kæde et billede (tilfældigt valgt) til den enkelte person i udskriften..
eks.
Bruger1's navn her | Tilfældigt billede fra bruger 1 her. Bruger2's navn her | Tilfældigt billede fra bruger 2 her. osv.
skal nok for god ordens skyld sige at mine billeder ikke ligger som blob i databasen, men har et 'bill_sti' felt med stien til billedet, samt et 'name' felt med filens navn. Disse skal jo også bruges.
Ok - den er jeg med på, men hvordan undgår jeg at skulle lave en queri for hver bruger så - skal jeg så lave "$userid" til et array af de userid's der findes i "users"?
$sql1 = "SELECT ID, userfirst, userlast FROM user"; $result1 = mysql_query($sql1) or die(mysql_error()); $number1 = mysql_num_rows($result1);
$sql2 = "SELECT bill_sti, name FROM filer WHERE userid=\"$userid\" ORDER BY RAND() LIMIT 1"; $result2 = mysql_query($sql2) or die(mysql_error());
Her ved jeg at $number1 er de antal brugere jeg skal liste. Dvs jeg skal have en tabel med "$number1" rækker. Første kolonne i tabellen er simpel nok - det er jo bare en while ( $row = mysql_fetch_array($result1) ) { osv..
Men problemet er jo at jeg skal have kædet et billede på hver som skal vises i kolonne nr. 2.
Hvis du laver et index i stil med: ALTER TABLE filer ADD INDEX ix_billede (userid, bill_sti, name); så burde din query pr bruger blive meget billig...
Hvis du vil have alle billeder du skal bruge i et hug, skal du sikkert:
SELECT DISTINCT userid, bill_sti, name FROM filer ORDER BY RAND();
Hvis du tager alle rækker den finder, og laver et array, hvor userid er nøglen (index), så burde du få en tabel, hvor du kan slå alle billeder op.
Du vil dog bruge en masse RAM på det - specielt hvis du har mange brugere, og så vil det andet (en query pr bruger) måske blive hurtigere og enklere...
noget i stil med: --------------- $sql1 = "SELECT ID, userfirst, userlast FROM user"; $result1 = mysql_query($sql1) or die(mysql_error()); $number1 = mysql_num_rows($result1); while ( $row = mysql_fetch_array($result1) ) { $sql2 = "SELECT bill_sti, name FROM filer WHERE userid=\"". $row[id] ."\" ORDER BY RAND() LIMIT 1"; $result2 = mysql_query($sql2) or die(mysql_error()); $row2 = mysql_fetch_array($result2);
// skriv "bruger data" fra $row ud // skriv "billed data" fra $row 2 ud }
Se det er der problemet ligger ;-) Den får nemlig ingen værdi..
Jeg har godt nok testet det ved at skrive et $number2 ud, hvilken får værdien 0 i alle gennemløb, når jeg skriver userid=\"". $row[id] ."\" eller userid=\"". $row['id'] ."\"
Men den får korrekt værdien 1 i alle gennemløb, når jeg sætter userid=101 , da user 101 har nogle billeder liggende ;-)
Jeg fandt ud af det... det var fordi min 'userid' i filer stod til at være varchar(10) og ikke mediumint(8)... så nu finder den det korrekt ser det ud til.. vidste ikke at den ikke kan søge på det, når det er varchar?
Nå ja.. du har jo smidt svar.. hehe.. det accepterer jeg!
Synes godt om
Ny brugerNybegynder
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.