Je to řazení, které vás zpomaluje. Místo náhodného řazení stačí vybrat náhodné product_db.unique_id
Ve svém dotazu nahraďte ORDER BY RAND()
s:
AND product_db.unique_id >= ROUND(RAND()*(SELECT MAX(unique_id) FROM product_db))
pomocí >=
místo =
v případě, že byl jedinečný_id odstraněn z databáze. Není to tak náhodný výsledek jako řazení podle randu, ale dotaz se provede mnohem rychleji. Pokud chcete, můžete spustit více dotazů pomocí =
dokud není nalezen výsledek, a stále to může být docela rychlejší než řazení všech těchto výsledků.
S explicitním JOIN by to bylo:
SELECT product_db.image
FROM product_db
JOIN product_page ON product_db.unique_id = product_page.product_unique_id
WHERE product_page.page_id = 3
AND product_db.status = 'Online'
AND product_db.unique_id >= ROUND(RAND()*(SELECT MAX(unique_id) FROM product_db))
LIMIT 1