Verificare che i filtri su un set di dati siano esclusivi

0

Supponiamo di avere una tabella di dati di, diciamo, auto con un gruppo di proprietà per ogni record. Esempio:

| Vin | Anno | Fare | Attori | colore | Chilometraggio |

Voglio consentire agli utenti di definire filtri (arbitrariamente complessi) che possono essere utilizzati per restituire un sottoinsieme di record dalla tabella. Tuttavia, c'è un problema: ogni record del veicolo può apparire solo in un sottoinsieme. Ad esempio, un utente può aggiungere due filtri:

(make = 'Chevrolet')
(make = 'Ford')

Questo è valido, perché nessun veicolo sarà duplicato tra i due set restituiti. Tuttavia, supponiamo che un utente inserisca due filtri diversi:

(make = 'Chevrolet')
(color = 'Black')

Questo è un set di filtri non valido, perché qualsiasi Chevy nera apparirà in entrambi i set di risultati.

È anche possibile annidare e combinare le unità filtro in un unico filtro: ad es.

((make = 'Chevrolet') AND ((color = 'Black') OR (anno > = 2012)))

che restituirà tutti i Chevys con un esterno nero o un anno modello del 2012 o superiore.

Senza sapere nulla dei dati effettivi nella tabella, c'è un modo per verificare se un set di filtri è garantito come esclusivo?

    
posta Tom Warner 05.11.2015 - 21:21
fonte

2 risposte

1

C'è solo un modo, e questo è il tuo primo esempio, in cui tutti i filtri fanno riferimento alla stessa colonna. (A condizione che possa esserci un solo valore in quella colonna per ogni riga, quindi nessun tipo di SET o dati di array. Probabilmente conosci lo schema, anche se non sai nulla dei dati.)

Un altro modo sarebbe testare i filtri forniti, combinandoli con AND. Se ciò restituisce risultati, i filtri non si escludono a vicenda. Ma questo ti dirà solo di adesso e i risultati potrebbero cambiare quando vengono aggiunti nuovi dati.

    
risposta data 18.08.2018 - 20:13
fonte
0

Utilizza le funzioni di filtro con le informazioni sul tipo per eseguire la convalida. Ad esempio, SPARQL utilizza la seguente sintassi:

FILTER( (?open != 1) || (((NOW() - xsd:datetime(?DATA_S))

Riferimenti

risposta data 18.08.2018 - 17:11
fonte

Leggi altre domande sui tag