Tôi đã có ứng dụng web khớp với hình ảnh vào thẻ và tôi cần tạo cách tinh chỉnh kết quả cho tìm kiếm thẻ. Tuy nhiên, tôi không thể tìm thấy một cách rõ ràng để thực hiện các truy vấn SQL đó, và đó là nơi tôi cần sự giúp đỡ của bạn.SQL n-to-n khớp nhiều giá trị
Ý tưởng là nếu tôi tìm kiếm thẻ "sạch" và "chó", tôi sẽ có kết quả hình ảnh có cả thẻ "sạch" và "chó". Nếu tôi cũng bao gồm thẻ "nhỏ", kết quả của tôi sẽ phải thu hẹp hình ảnh có ba thẻ được liên kết.
Vì vậy, có mối quan hệ N-to-N, đó là cách chính xác để làm điều này?
phương pháp tự nhiên của tôi đã tạo mã một cái gì đó như thế này, nhưng tôi chắc chắn không thích nơi nó đang xảy ra:
SELECT images.*
FROM images
INNER JOIN image_tags ON ...
INNER JOIN tags ON ...
WHERE tags.tag = @tag1
AND EXISTS
(
SELECT 1
FROM images
INNER JOIN image_tags ON ...
INNER JOIN tags ON ...
WHERE tag = @tag2
AND EXISTS
(
SELECT 1
FROM images
INNER JOIN image_tags ON ...
INNER JOIN tags ON ...
WHERE tag = @tag3
AND EXISTS (...)
...
)
)
Chắc chắn, đó không phải là thực sự tốt. Bất kỳ ý tưởng?
Cảm ơn!
Điều này khá cứng nhắc về số lượng thẻ được cho phép/bắt buộc, cũng như trả về một hàng cho mỗi thẻ được chỉ định, thay vì cho mỗi hình ảnh. –
'GROUP BY' nên tránh trả lại hàng cho mỗi thẻ. Tôi đã chỉnh sửa câu hỏi để hiển thị câu hỏi sẽ hoạt động như thế nào với một số lượng thẻ động. –
Cảm ơn rất nhiều! Tôi đã không nghĩ đến việc kiểm tra lại kết quả với HAVING COUNT(). – Alpha