Ho una tabella di directory dei fornitori in un database MySQL che ha una tabella di mapping dei fornitori associati. Questa tabella associa i seguenti criteri a un singolo fornitore:Selezione MySQL basata sui valori ENUM
- Servizi.
- Specialità
- Standards
Solo per informazioni di fondo ciascuno di questi sono valori memorizzati in 3 singole tabelle corrispondenti. Tutti i servizi che possono essere forniti da qualsiasi fornitore sono elencati nella tabella dei servizi e la tabella di mapping acquisisce i servizi offerti da un singolo fornitore. Un fornitore può fornire più di un servizio in modo da disporre di una mappatura per ciascun servizio fornito. Lo stesso vale per specialità e standard.
Dove mi trovo in difficoltà è in una query di ricerca in cui un utente può interrogare un elenco di fornitori su uno o tutti e tre i criteri di cui sopra. Quindi, ad esempio, possono cercare un fornitore con servizio a, specialità be standard c. Non possono cercare i valori multipli su un servizio, specialità o standard
Il mio tavolo mapping è simile al seguente:
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
Dove viene utilizzato mappe entity_type per indicare il tipo di entità viene mappato e ENTITY_ID indica il entità individuale.
La mia domanda è la seguente:
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');
che dovrebbe restituire tutti i fornitori che hanno un servizio di chiave con l'id 55, una specialità con l'id 218 e uno stendardo con l'id 15. Tuttavia solo i rendimenti un set di risultati vuoto anche se so che c'è almeno un fornitore con questi definiti. Sembra che abbia qualcosa a che fare con le clausole AND composte, ma non riesce a capire cosa.
Apprezzerebbero se qualcuno avesse qualche idea?
Puoi creare alcuni dati di esempio con le tue tabelle e inserirle in un SQL Fiddle? – Kermit
Vedere http://sqlfiddle.com/#!2/bddae/2. Spero che sia giusto come non hai mai usato SQL Fiddle. Se cerco un fornitore con un servizio chiave = 1, specialità = 1 e uno standard = 3 deve restituire fornitore 1 e fornitore 4. –