Mam tabelę katalogu dostawców w bazie danych MySQL, która ma skojarzoną tabelę mapowania dostawców. Poniższa tabela przedstawia następujące kryteria w odniesieniu do konkretnego dostawcy:Wybieranie MySQL na podstawie wartości ENUM
- Usługi.
- Specialties
- Standardy
Tylko dla informacji tła każdy z nich wartości przechowywane w 3 indywidualnych odpowiednich tabel. Wszystkie usługi, które mogą być świadczone przez dowolnego dostawcę, są wymienione w tabeli usług, a tabela mapowania obejmuje usługi oferowane przez pojedynczego dostawcę. Dostawca może zapewnić więcej niż jedną usługę, aby mieć mapowanie dla każdej świadczonej usługi. To samo dotyczy specjalności i standardów.
Tam, gdzie napotykam na trudności, znajduje się zapytanie, w którym użytkownik może wyszukać listę dostawców na jednym lub wszystkich trzech powyższych kryteriach. Mogą na przykład szukać dostawcy usług z usługą a, specjalnością b i standardem c. Nie można wyszukać wiele wartości na usługi, specjalności lub standardowy
Moje mapowania tabeli wygląda następująco:
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
Gdzie mapy ENTITY_TYPE służy do wskazania typu jednostki są odwzorowywane i ENTITY_ID wskazuje indywidualny podmiot.
Moje zapytanie brzmi następująco:
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');
które powinny powrócić wszystkich dostawców, którzy mają kluczową usługę z identyfikatorem 55, specjalność z identyfikatorem 218 i standardowe z identyfikatorem 15. Jednak to po prostu zwraca pusty zestaw wyników, mimo że wiem, że istnieje co najmniej jeden dostawca z tymi zdefiniowanymi. Wydaje się, że ma to coś wspólnego ze złożonymi klauzulami ORAZ, ale nie może dowiedzieć się, co.
Byłbym wdzięczny, jeśli ktoś ma jakieś pomysły?
Czy możesz utworzyć przykładowe dane ze swoimi tabelami i wstawić je do Fiddle SQL? – Kermit
Zobacz http://sqlfiddle.com/#!2/bddae/2. Mam nadzieję, że to prawda, ponieważ wcześniej nie używałeś SQL Fiddle. Jeśli wyszukuję dostawcę z kluczową usługą = 1, specjalność = 1 i standard = 3, powinien on zwrócić dostawcę 1 i dostawcę 4. –