Tôi có bảng thư mục nhà cung cấp trong cơ sở dữ liệu MySQL có bảng ánh xạ nhà cung cấp liên quan. Bảng này ánh xạ các tiêu chí sau đối với nhà cung cấp cá nhân:MySQL chọn dựa trên giá trị ENUM
- Dịch vụ.
- Specialties
- Tiêu chuẩn
Chỉ cần để biết nền mỗi một trong các giá trị đã được lưu trữ trong các bảng tương ứng với 3 cá nhân. Tất cả các dịch vụ có thể được cung cấp bởi bất kỳ nhà cung cấp nào được liệt kê trong bảng dịch vụ và bảng ánh xạ sẽ thu thập các dịch vụ được cung cấp bởi một nhà cung cấp cá nhân. Một nhà cung cấp có thể cung cấp nhiều dịch vụ để họ có thể lập bản đồ cho từng dịch vụ mà họ cung cấp. Cùng đi cho các đặc sản và tiêu chuẩn.
Nơi tôi gặp sự cố là trên truy vấn tìm kiếm nơi người dùng có thể truy vấn danh sách nhà cung cấp trên bất kỳ một hoặc tất cả ba tiêu chí ở trên. Vì vậy, ví dụ họ có thể tìm kiếm một nhà cung cấp với dịch vụ a, đặc sản b và tiêu chuẩn c. Họ không thể tìm kiếm nhiều giá trị trên một dịch vụ, đặc biệt hoặc tiêu chuẩn
bảng ánh xạ của tôi trông giống như sau:
id int(11) unsigned NOT NULL
supplier_id int(11) unsigned NOT NULL
entity_type enum('KEY_SERVICE','STANDARD','SPECIALITY') NOT NULL
entity_id int(11) NOT NULL
đâu bản đồ ENTITY_TYPE được sử dụng để chỉ các loại thực thể được ánh xạ và ENTITY_ID chỉ ra thực thể riêng lẻ.
truy vấn của tôi là như sau:
SELECT DISTINCT supplier_mappings.supplier_id, suppliers.company_name
FROM supplier_mappings
JOIN suppliers ON suppliers.id = supplier_mappings.supplier_id
WHERE (supplier_mappings.entity_type = 'KEY_SERVICE' AND supplier_mappings.entity_id = '55')
AND (supplier_mappings.entity_type = 'SPECIALITY' AND supplier_mappings.entity_id = '218')
AND (supplier_mappings.entity_type = 'STANDARD' AND supplier_mappings.entity_id = '15');
mà phải trả lại tất cả các nhà cung cấp có một dịch vụ quan trọng với id 55, một đặc sản với id 218 và một tiêu chuẩn với id 15. Tuy nhiên nó chỉ trở lại một tập kết quả trống mặc dù tôi biết có ít nhất một nhà cung cấp được xác định. Nó dường như là một cái gì đó để làm với các mệnh đề AND phức tạp nhưng không thể tìm ra những gì.
Bạn sẽ đánh giá cao nếu có ai có ý tưởng nào?
Bạn có thể tạo một số dữ liệu mẫu với các bảng của bạn và đặt nó vào một Fiddle SQL? – Kermit
Xem http://sqlfiddle.com/#!2/bddae/2. Hy vọng đó là đúng như đã không được sử dụng SQL Fiddle trước. Nếu tôi tìm kiếm nhà cung cấp có dịch vụ chính = 1, đặc sản = 1 và tiêu chuẩn = 3, nhà cung cấp phải trả lại Nhà cung cấp 1 và Nhà cung cấp 4. –