2010-10-21 20 views
7

這是我原來的查詢......是否有在MySQL的子查詢中使用LIMIT的解決方法?

SELECT `id` 
    FROM `properties` 
LIMIT 10, 20 

LIMIT條件是分頁。

現在,我必須得到像以前一樣,但我只需要得到條件存在的行的三分之一。

我想出了這個,就在之前我想通了,該怎麼辦扔LIMIT 30(共行匹配/ 3)* 2

SELECT `id` 
    FROM `properties` 
WHERE `id` NOT IN (SELECT `id` 
         FROM `properties` 
        WHERE `vendor` = "abc" 
        ORDER BY RAND() 
        LIMIT 30) 
LIMIT 10, 20  

MySQL表示...

1235 - 該版本的MySQL還不支持 'LIMIT & IN/ALL/ANY/SOME子查詢'

我想我不能使用LIMIT在子查詢中。

所以這是一個多問題,但所有相關的...

  • 是否有子查詢LIMIT一個解決方法嗎?
  • 我可以在MySQL中選擇1/3的匹配行嗎?
  • 我是否需要將它變成2個查詢,或者只是選擇全部並取消設置PHP中不需要的行?
+1

是彈簧想到一個明顯的一點是,*隨機的結果*和*分頁*真的不一起去... – deceze 2010-10-21 04:08:39

+0

@deceze是的,我想到,當在PHP中做它。所以我只拿到了前三分之一。 – alex 2010-10-21 04:25:37

回答

4

如果你的MySQL版本不支持,那麼你有2種選擇:

  • 升級。總是很有趣,最好是最新版本。
  • 打破你的子查詢使用PHP。獲取ID,然後將結果格式化爲逗號分隔的字符串。
+0

在共享主機上,所以無法升級。不過,我是用PHP做的。 :) 感謝您的回答。 – alex 2010-10-21 04:30:16

1

MySQL在子查詢中支持LIMIT ...但MySQL不支持在子查詢中使用IN/NOT IN。

說實話,我真的不知道你在做什麼。

+0

只是客戶的一個奇怪的請求 - 「我想顯示所有屬性,但只有特定供應商的隨機1/3」。 – alex 2010-10-21 04:26:49

15

對不起,我遲到,這個工作對我來說:

SELECT p.id 
    FROM properties p 
LEFT JOIN (SELECT t.id 
      FROM PROPERTIES t 
      WHERE t.vendor = 'abc' 
     ORDER BY RAND() 
      LIMIT 30) x ON x.id = p.id 
    WHERE x.id IS NULL 
    LIMIT 10, 20 
+0

感謝OMG Ponies,它已經在PHP中做過了,但我會從中學到一些東西。 +1 – alex 2010-10-21 04:37:11

+0

這是最好的答案!完全爲我工作 – 2014-06-04 15:51:03

相關問題