<p dir="ltr">Grazie mille. Si, preferivo fare tutto nella query lato server, per avere un risultato "pulito" solo da mostrare. La soluzione ibrida mi sembra però più fattibile: seleziono solo le id_spec che mi servono con il where in, poi lato client con php seleziono solo quelle che coincidono con il valore del filtro. <br>
Vediamo cosa riesco a combinare! </p>
<div class="gmail_extra"><br><div class="gmail_quote">Il 05 Nov 2016 09:36, "Alberto Bonacina" <<a href="mailto:bonacina.alberto@gmail.com">bonacina.alberto@gmail.com</a>> ha scritto:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Il 5 novembre 2016 08:07, Roberto Santini<br>
<<a href="mailto:roberto.santini89@gmail.com">roberto.santini89@gmail.com</a>> ha scritto:<br>
<div class="quoted-text">> Ora, ho predisposto un Form in cui posso selezionare gli utenti facendo un<br>
> filtro su queste specifiche: posso selezionare quale spec filtrare e quale<br>
> valore debba avere. Finché si tratta di una sola specifica non c'è problema.<br>
> Quando sono più d'una però non so bene come fare. Se faccio:<br>
><br>
> SELECT * FROM user u JOIN spec_values s ON.... WHERE (s.id_spec=1 and<br>
> s.value=...) OR (s.id_spec=2 and s.value=...)<br>
><br>
> ottengo gli utenti che hanno id_spec=1 O id_spec=2. Io voglio che valgano<br>
> entrambe le condizioni, ma ovviamente se metto AND tra le due parentesi non<br>
> ottengo nessun risultato. Ho provato anche utilizzando le sub query ma senza<br>
> successo.<br>
<br>
</div>Quindi se ho capito bene tu vuoi farti ritornare gli utenti che<br>
abbiamo a TRUE tutte le n condizioni che hai messo in quella form,<br>
giusto?<br>
<br>
Lo devi fare per forza con una query _tutto compreso_ o puoi anche<br>
usare un certo qualche linguaggio? Tipo javascript o PHP?<br>
In questo caso potresti farti ritornare una "struttura" in cui hai la<br>
lista delle spec_id<->valori che tu hai cercato e allegato la lista<br>
degli utenti che rispettano la singola condizione, successivamente<br>
cerchi se ci sono degli utente che appartengono tutte queste liste. Ti<br>
scrivo questa struttura in JSON<br>
<br>
{<br>
"ricerca" : [<br>
{ "id_spec" : 1,<br>
"value": "email_cercata",<br>
"utenti" : [1,2,3,4,5,6]<br>
},<br>
{<br>
"id_spec" : 2,<br>
"value": "telefono_cercato",<br>
"utenti" : [3,5,8,9,10]<br>
}<br>
],<br>
"utenti" : [ //queste sono le info degli utenti che ci sono nei<br>
vari array di sopra<br>
{"user_id": 1, "name" : "nomeUtente1"},<br>
.....<br>
{"user_id": 10, "name" : "nomeUtente1"},<br>
]<br>
}<br>
<br>
a questo punto gli utenti che tu vuoi, se ho capito bene, dovrebbero<br>
essere 3 e 5, di cui l'array _utenti_ nella risposta ti dice come si<br>
chiamano. Questa soluzione è un po' ibrida nel senso che hai la<br>
generazione della struttra lato server, e poi la ricerca lato client.<br>
Altrimenti potresti fare tutto lato server e rispondere direttamente<br>
con la lista degli utenti. Secondo me la soluzione tutta query è più<br>
complicata che la stessa ricerca fatta con php/javascript.<br>
<div class="quoted-text"><br>
> Secondo me dovresti cambiare la condizione WHERE della tua query con l'operatore "IN".<br>
> Dovresti recuperare dalla tua form la lista degli id_spec selezionati e poi impostare una condizione del tipo:<br>
> WHERE s.id_spec IN ( 1, 2, 8,.... )<br>
<br>
</div>Anche io avevo pensato una IN, il problema è che così prendi gli<br>
utenti che hanno un qualche valore in quell'insieme di spec, dopo però<br>
li devi filtrare di nuovo per quelli che hanno tutte le spec che la<br>
form ha richiesto e successivamente controllare che siano uguali i<br>
valori di quelle spec... e che siano tutti uguali.<br>
<font color="#888888"><br>
<br>
--<br>
Bonacina Alberto<br>
Website: <a href="http://www.albertobonacina.com" rel="noreferrer" target="_blank">www.albertobonacina.com</a><br>
</font><div class="elided-text"><br>
--<br>
Sito BgLUG: <a href="http://www.bglug.it" rel="noreferrer" target="_blank">http://www.bglug.it</a><br>
Mailing list: <a href="http://lists.linux.it/listinfo/bglug" rel="noreferrer" target="_blank">http://lists.linux.it/<wbr>listinfo/bglug</a></div></blockquote></div><br></div>