Bạn có thể đạt được điều này bằng cách tự tham gia, chẳng hạn như:
SELECT DISTINCT e2.eventId
FROM event_tags e1
INNER JOIN event_tags e2
ON e2.tagName LIKE CONCAT('%', e1.tagName, '%') AND e2.eventId != e1.eventId
WHERE e1.eventId = {}
Tôi nhận thấy rằng truy vấn thứ hai có LIMIT 3
mệnh đề. Trước hết, xin lưu ý rằng không có ORDER BY
mệnh đề này không tạo ra kết quả có thể đoán trước được. Đây là giải pháp dựa trên hàm window ROW_NUMBER()
(có sẵn trong MySQL 8), sẽ tạo ra không nhiều hơn 3 event_id
cho mỗi thẻ phù hợp:
SELECT DISTINCT event_id FROM (
SELECT e2.eventId, ROW_NUMBER() OVER(PARTITION BY e1.eventId ORDER BY e2.eventId) rn
FROM event_tags e1
INNER JOIN event_tags e2
ON e2.tagName LIKE CONCAT('%', e1.tagName, '%') AND e2.eventId != e1.eventId
WHERE e1.eventId = {}
) WHERE rn <= 3