Użyłem znaleziony gdzieś skrypt do losowania jednego rekordu z tabeli:
SELECT * FROM ciekawart JOIN (SELECT FLOOR(idd*rand()) AS rand_id FROM (SELECT MAX(id) AS idd FROM ciekawart) AS tmp2 ) AS tmp ON ciekawart.id = tmp.rand_id LIMIT 1
W tabeli 'ciekawart' mam ciekawostki, z których losowana jest jedna. Jak widać najpierw pobierane jest maksymalne id tabeli, potem jest ono mnożone przez losowo wygenerowaną liczbę (za pomocą rand()) tak, by wybrać losowe id ciekawostki. Generalnie wszystko działa - losuje się jedna ciekawostka, a skrypt jest dosyć optymalny. Jednak dochodzą tu jeszcze warunki ograniczające zakres losowania. Pokażę to tak: tabela ciekawart ma m.in. takie kolumny:
id | zespol | ciekawostki
Ciekawostki są o zespołach, więc kolumna 'zespol' przechowuje id zespołu. Dzięki temu mogę się odwoływać do tabeli z nazwami zespołów, przedstawionej poniżej.
Budowa tabeli 'nazwyzespolow':
id | nazwazespolu | rock | punk | ....
kolumna 'id' w tej tabeli odpowiada kolumnie 'zespol' w tabeli 'ciekawart'. Kolumny 'rock', 'punk' itd określają czy konkretnemu zespołowi przypisane są te gatunki (tzn np dla zespołu Black Sabbath rock=1, punk=0, pop=0 itd).
Muszę więc zrobić tak, by przy losowaniu ciekawostki, po wybraniu odpowiedniego gatunku na stronie, ciekawostki losowały się tylko z tego konkretnego gatunku, bo obecny skrypt losuje wszystkie dostępne. Czyli skrypt ma wybrać tylko te ciekawostki z tabeli 'ciekawart', gdzie np nazwyzespolow.rock = '1'.
Innymi słowy, gdyby pominąć losowanie, zapytanie wyglądałoby tak:
W taki sam sposób muszę to zrobić dla tego skryptu losującego - kombinuję już od dwóch dni i cały czas zapytanie jest błędne... ma ktoś jakieś pomysły?
SELECT ciekawart*, nazwyzespolow.* FROM ciekawart, nazwyzespolow WHERE nazwyzespolow.id = ciekawart.zespol AND nazwyzespolow.rock = "1"
pozdrawiam
flaa