Autor | Zpráva | ||
---|---|---|---|
Michal Kváček Profil * |
#1 · Zasláno: 15. 8. 2011, 19:55:13
Dobrý den, ahoj.
Při tvorbě vlastní fotogalerie jsem narazil na problém s výpisem alb a náhodných fotografií z nich. Na titulní stránce jsou zobrazeny tyto alba, kde titulní obrázek tvoří náhodně vybraná fotka (ovšem z toho alba, pochopitelně). Do teď jsem vše řešil pomocí jednoduchého dotazu: SELECT `file_name` FROM `galerie_galleries`WHERE album_id=id_alba ORDER BY RAND() LIMIT 1. Fungovalo to, nicméně pro n alb se odeslalo také n stejnách dotazů (lišících se pouze v id alba). Abych poněkud usměrnil tuto "šílenost", vytvořil jsem tento dotaz: SELECT g.id, g.gal_name, g.gal_url, g.description, UNIX_TIMESTAMP(g.created), g.score, p.file_name FROM `galerie_galleries` AS g JOIN ( SELECT `file_name` FROM `galerie_photos` ORDER BY RAND() LIMIT 1 ) AS p GROUP BY g.id Funguje dobře - až na jeden detail. V tomto podání vrací jako file_name stále stejné jméno souboru. Logicky - nemá WHERE. Zde ovšem přichází kámen úrazu - myslel jsem si, že přidáním WHERE gallery=g.id se vše vyřeší. Nevyřešilo. Databáze nezná sloupec g.id A já se tedy ptám - je možné nějak dostat do poddotazu id galerie, která je vybírána v hlavním dotazu (prvním SELECTu)? Nebo na to jdu úplně špatně a měl bych to celé znovu promyslet? Budu vděčný za každou radu, či jen postrčení (ale i odkaz na google - angličtina nevadí). Děkuji. |
||
DJ Miky Profil |
#2 · Zasláno: 15. 8. 2011, 20:40:44
Jednodušší bude nepřipojovat tabulku JOINem, ale dát poddotaz přímo jako sloupec:
SELECT g.id, g.gal_name, g.gal_url, g.description, UNIX_TIMESTAMP(g.created), g.score, (SELECT file_name FROM `galerie_photos` WHERE gallery=g.id ORDER BY RAND() LIMIT 1) file_name FROM `galerie_galleries` AS g |
||
Michal Kváček Profil * |
#3 · Zasláno: 15. 8. 2011, 20:58:09
DJ Miky:
Geniální, děkuji mnohokrát. V databázích musím ještě trénovat :). |
||
Medvídek Profil |
#4 · Zasláno: 15. 8. 2011, 21:48:32
Michal Kváček:
Jen doporučim nepoužívat ORDER BY RAND() |
||
Michal Kváček Profil * |
#5 · Zasláno: 16. 8. 2011, 18:52:15
Medvídek:
Já vím, četl jsem o tom. Jenomže nevím, jak to do toho dotazu dostat. Zkoušel jsem postup popsaný na adrese http://www.warpconduit.net/2011/03/23/selecting-a-random-record-using-mysql-benchmark-results/ (2. dotaz) a časově vycházelo stále lépe ORDER BY RAND() (při nějakých 1300 řádcích) Každopádně si vždycky nechám rád poradit :). |
||
Časová prodleva: 13 let
|
0