mysql RAND()LIMIT

Fre*_*Pro 6 mysql

您好我有这样的查询:

    SELECT otel_id 
        FROM YAZILIM_menu_icerik 
        WHERE YAZILIM_menu_icerik.menu_id = 39 
        AND otel_id IN (
                        SELECT otel_id 
                        FROM YAZILIM_menu_icerik 
                        WHERE menu_id =$id 
                        ORDER BY RAND()
                        ) 
        LIMIT 0,20
Run Code Online (Sandbox Code Playgroud)

它应该每次随机显示20家酒店,但相反,我最终每次都得到同样的20家酒店.长话短说RAND()似乎不起作用,我似乎无法找到任何逻辑错误.

编辑:问题解决了.Mysql看不到内部RAND()所以这是正确的方法:

SELECT otel_id 
    FROM YAZILIM_menu_icerik 
    WHERE YAZILIM_menu_icerik.menu_id = 39 
    AND otel_id IN (
                    SELECT otel_id 
                    FROM YAZILIM_menu_icerik 
                    WHERE menu_id =$id 
                   )
ORDER BY RAND() 
LIMIT 0,20
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 9

您的ORDER BY和LIMIT条款应该在一起:

SELECT otel_id 
FROM YAZILIM_menu_icerik 
WHERE YAZILIM_menu_icerik.menu_id = 39
AND otel_id IN 
(
    SELECT otel_id 
    FROM YAZILIM_menu_icerik 
    WHERE menu_id = $id 
)
ORDER BY RAND()
LIMIT 20
Run Code Online (Sandbox Code Playgroud)

ORDER BY在子查询中没有LIMIT子句没有任何意义,因为排序不一定保留在外部查询的结果中.

  • 问题解决了SELECT otel_id FROM YAZILIM_menu_icerik WHERE YAZILIM_menu_icerik.menu_id = 39 AND otel_id IN(SELECT otel_id FROM YAZILIM_menu_icerik WHERE menu_id = $ id)ORDER BY RAND()LIMIT 0,20"; (2认同)