2015-11-17 92 views
1

我正在創建用戶建議應用程序。該應用程序獲取查詢MySQL服務器和從USER_TABLE帶來了10個隨機用戶,user_imagesMySQL選擇RANDOM與多個表

user_table ===> id, name, username 
user_image ===> id, userid, image_path, image 

我得到這個腳本explainextended.com這工作得很好,我的問題是添加user_image表查詢

   SELECT id, name, username 
       FROM (
          SELECT @cnt := COUNT(*) + 1, 
           @lim := 10 
          FROM user_table 
         ) vars 
       STRAIGHT_JOIN 
         (
          SELECT r.*, 
           @lim := @lim - 1 
          FROM user_table r 
          WHERE (@cnt := @cnt - 1) 
           AND RAND() < @lim/@cnt 
         ) i 

如果有人能幫忙,我會很高興,謝謝。

+2

那麼添加另一個連接? –

+0

是否存在需要幫助的特定錯誤?像@Dagon說的那樣,研究用MySQL查詢編寫JOIN,或者使用任何數據庫服務器。 –

+0

基本上:''left user_image on user_table.id = user_image.userid' –

回答

0

爲什麼你不使用隨機順序,然後限制?

SELECT r.id, r.name, r.username FROM user_table ORDER BY RAND() LIMIT 10

的加入與user_pictures變得非常容易。

編輯:

要回答原來的問題,因爲上面的解決方案是太慢了。你可以在STRAIGHT_JOIN中加入結果。

SELECT r.*, img.*, @lim := @lim - 1 FROM user_table r LEFT JOIN user_images img ON (r.id = img.userid) WHERE (@cnt := @cnt - 1) AND RAND() < @lim/@cnt

+1

因爲在一張可怕的低效率的大桌子上 - 而且不是問題無論如何 –

+0

這很慢,我有超過100萬的用戶,差不多1.2分鐘執行 –

+1

可能應該是'img.userid' –