2010-04-16 30 views
6

Một thời gian trước, tôi đã làm việc trên một dự án MS-SQL và tôi nhớ một điều "IS IN". Tôi đã thử nó trên một dự án MySQL và nó đã không hoạt động.MySQL "IS IN" tương đương?

Có tương đương không? Cách giải quyết?

Dưới đây là các truy vấn đầy đủ Tôi cố gắng để chạy:

SELECT * 
FROM product_product, product_viewhistory, product_xref 
WHERE 
(
(product_viewhistory.productId = product_xref.product_id_1 AND product_xref.product_id_2 = product_product.id) 
OR 
(product_viewhistory.productId = product_xref.product_id_2 AND product_xref.product_id_1 = product_product.id) 
) 
AND product_product.id IS IN 
    (SELECT DISTINCT pvh.productId 
    FROM product_viewhistory AS pvh 
    WHERE pvh.cookieId = :cookieId 
    ORDER BY pvh.viewTime DESC 
    LIMIT 10) 
AND product_viewhistory.cookieId = :cookieId 
AND product_product.outofstock='N' 
ORDER BY product_xref.hits DESC 
LIMIT 10 

Nó khá lớn ... nhưng phần mà tôi quan tâm là:

AND product_product.id IS IN 
    (SELECT DISTINCT pvh.productId 
    FROM product_viewhistory AS pvh 
    WHERE pvh.cookieId = :cookieId 
    ORDER BY pvh.viewTime DESC 
    LIMIT 10) 

Mà về cơ bản nói rằng tôi muốn các sản phẩm nằm trong "top 10" của truy vấn phụ đó.

Bạn sẽ đạt được điều đó như thế nào với MySQL (trong khi cố gắng hiệu quả)?

+0

Không phải là nó giống như 'trong' trong MySQL? – armandino

+1

IN là những gì bạn đang tìm kiếm, nhưng điều này thực sự cần được triển khai bằng cách sử dụng JOIN thay vì truy vấn phụ. –

+0

Vui lòng thông báo cho "THAM GIA". Bởi vì anys mysql không cho phép "LIMIT" bên trong "IN". Vì vậy, tôi có thể phải làm JOIN? –

Trả lời

15

Bạn đang tìm kiếm IN:

AND product_product.id IN 
    (SELECT DISTINCT pvh.productId 
    FROM product_viewhistory AS pvh 
    WHERE pvh.cookieId = :cookieId 
    ORDER BY pvh.viewTime DESC 
    LIMIT 10) 
+1

ahhhhhhhhhhhhhh –

+0

"Phiên bản này của MySQL chưa hỗ trợ 'LIMIT & IN/ALL/ANY/SOME subquery'". Tôi đoán đây là một vấn đề khác ... –

2

Hãy thử IN (không "là")

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