2010-10-21 29 views
7

Đây là câu hỏi ban đầu của tôi ...Có cách nào khác để sử dụng LIMIT trong truy vấn phụ trong MySQL không?

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

Điều kiện LIMIT là dành cho pagination.

Bây giờ, tôi phải làm như trước đây, nhưng tôi cần chỉ nhận được một phần ba số hàng có điều kiện.

tôi đến với điều này, chỉ cần ném LIMIT 30 trong trước khi tôi tìm ra cách để làm (hàng tổng hợp/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 nói ...

1235 - Phiên bản MySQL này chưa hỗ trợ 'LIMIT & IN/ALL/ANY/SOME subquery'

Tôi đoán tôi không thể sử dụng LIMIT trong truy vấn phụ.

Vì vậy, đây là một câu hỏi đa nhưng tất cả liên quan ...

  • Có một cách giải quyết cho LIMIT trong subquery?
  • Tôi có thể chọn 1/3 hàng phù hợp với MySQL không?
  • Tôi có cần biến điều này thành 2 truy vấn hay chỉ cần chọn tất cả và bỏ đặt các hàng không cần thiết trong PHP?
+1

Một điều rõ ràng mà lò xo để ý là * kết quả ngẫu nhiên * và * pagination * không thực sự đi cùng nhau ... – deceze

+0

@ Deceze Yeah, tôi đã thấy rằng khi thực hiện nó trong PHP. Vì vậy, tôi chỉ lấy 1/3 đầu tiên. – alex

Trả lời

4

Nếu phiên bản của MySQL không hỗ trợ mà sau đó bạn có 2 lựa chọn:

  • Upgrade. Luôn vui vẻ và thường tốt nhất là sử dụng phiên bản mới nhất.
  • Tách truy vấn phụ của bạn bằng php. Lấy các id, sau đó định dạng các kết quả thành một chuỗi được phân tách bằng dấu phẩy.
+0

Trên máy chủ chia sẻ, vì vậy không thể nâng cấp. Tuy nhiên, tôi đã làm nó trong PHP. :) Cảm ơn câu trả lời của bạn. – alex

1

MySQL hỗ trợ LIMIT trong truy vấn con ... nhưng MySQL KHÔNG hỗ trợ sử dụng IN/NOT IN với truy vấn phụ.

Thành thật mà nói tôi thực sự không biết bạn đang cố gắng làm gì.

+0

Chỉ là một yêu cầu kỳ lạ của một khách hàng - "Tôi muốn hiển thị tất cả các thuộc tính, nhưng chỉ ngẫu nhiên 1/3 bởi một nhà cung cấp cụ thể". – alex

15

Xin lỗi tôi đến trễ, điều này đã làm việc cho tôi:

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

Cảm ơn OMG Ponies, đã thực hiện nó trong PHP nhưng tôi sẽ học được điều gì đó từ điều này. +1 – alex

+0

Đây là câu trả lời hay nhất! Hoàn toàn làm việc cho tôi –

Các vấn đề liên quan