Salve,
titolo dubbio perchè non so se è corretto dire "recupero dati granulare" MA vi illustro il problema che probabilmente risolvo con una singola query.
Ho questa tabella strutturata così.
Tabella X
codice:
+---+---------+----+------+----+-----+-------+------+
| id | name | f1 | f2 | f3 | tag | field | value |
+---+---------+----+------+----+-----+-------+------+
| 1 | test | 13 | | | A | C | 1 |
| 2 | test | 13 | 10 | | A | C | 2 |
| 3 | test | 13 | 10 | 5 | A | C | 3 |
+---+---------+----+------+----+-----+-------+------+
In pratica vado a salvare i valori (value) di alcuni campi (field) in funzione di name, f1 e tag.
Ho però la possibiltà di salvare per la stessa terna di dati name, f1 e tag, altri valori in funzione di f2 e f3
Ammettendo per esempio come nello schema che:
name: test
f1: 13
tag: A
Value = 1
Nel caso però che:
f2: 10
Value = 2
E infine che
f2: 10
f3: 5
Value = 3
Il mio problema è che vorrei fare una query che all'inserimento di valori errati di f2 OPPURE di f3, mi ritornasse il primo valore valido.
ESEMPIO in pseudo codice:
// recupera un valore in funzione del match dei valori $f1, $f2, $f3 e $tag nella tabella X
// $f2 e $f3 sono entrambi opzionali
// $f1, $tag e $field devono obbligatoriamente esistere (natural join)
function get_value($f1, $f2, $f3, $tag, $value);
get_value(13, 60, 20, 'A', 'C');
// f2=60 e f3=20 non sono presenti quindi deve ritornare 1
get_value(13, 10, 20, 'A', 'C');
// f2=10 è prensete ma f3=20 non è presente quindi deve ritornare 2
get_value(13, 10, 5, 'A', 'C');
// tutti i valori f2, f3 sono presenti quindi deve ritornare 3
E' possibile giocando un pò con LEFT join sulla sola tabella X ottenere un risultato come illustrato?
Grazie mille, intanto continuo a fare test
(p.s. con 3 query avrei risolto ma vorrei evitare inutile overhead)