Na nu enkele dagen met Google gezocht te hebben en alle mogelijke opzetten geprobeert te hebben kom ik niet uit volgend Mysql probleem.
Stel ik heb een 3 tal tabellen die ik op elkaar JOIN. Vervolgens wil ik random een rij krijgen na het feit dat deze tabellen aan elkaar gekoppeld zijn geweest.
Voor de eerste tabel (in dit geval Product) kan ik zonder gebruik te maken van RAND() zodat alles gelezen moet worden heel 'simpel' een record pakken middeld onderstaande mysql code. Echter hoe krijg ik nu de bijbehorende rows uit die andere tabellen erbij. Ik kan het wel zo krijgen dat hij de eerste row pakt, maar ik moet eigenijk 'random row uit tabel 1' en join met die ID random de records uit tabel 2 etc. Hopelijk is duidelijk wat ik bedoel. Is dit mogelijk, kan ik in een join een waarde gebruiken van een subquery in een vorige join?
research: http://jan.kneschke.de/projects/mysql/order-by-rand/
Stel ik heb een 3 tal tabellen die ik op elkaar JOIN. Vervolgens wil ik random een rij krijgen na het feit dat deze tabellen aan elkaar gekoppeld zijn geweest.
Voor de eerste tabel (in dit geval Product) kan ik zonder gebruik te maken van RAND() zodat alles gelezen moet worden heel 'simpel' een record pakken middeld onderstaande mysql code. Echter hoe krijg ik nu de bijbehorende rows uit die andere tabellen erbij. Ik kan het wel zo krijgen dat hij de eerste row pakt, maar ik moet eigenijk 'random row uit tabel 1' en join met die ID random de records uit tabel 2 etc. Hopelijk is duidelijk wat ik bedoel. Is dit mogelijk, kan ik in een join een waarde gebruiken van een subquery in een vorige join?
SQL:
1
2
3
4
5
6
7
8
9
10
| SELECT * FROM `Product` JOIN ( SELECT `r1`.`ProductID` FROM `ProductHoles` AS `r1` JOIN (SELECT (RAND() * (SELECT MAX(`ProductHolesID`) FROM `ProductHoles`)) AS `ProductHolesID`) AS r2 WHERE `r1`.`ProductHolesID` >= `r2`.`ProductHolesID` ORDER BY `r1`.`ProductHolesID` ASC LIMIT 1) as `rows` ON (`rows`.`ProductID` = `Product`.`ProductID`) |
research: http://jan.kneschke.de/projects/mysql/order-by-rand/
[ Voor 78% gewijzigd door Gerwin op 22-11-2007 17:02 . Reden: verduidelijkt ]