[bglug] Mysql query

Roberto Santini roberto.santini89@gmail.com
Sab 5 Nov 2016 11:14:56 CET


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.
Vediamo cosa riesco a combinare!

Il 05 Nov 2016 09:36, "Alberto Bonacina" <bonacina.alberto@gmail.com> ha
scritto:

Il 5 novembre 2016 08:07, Roberto Santini
<roberto.santini89@gmail.com> ha scritto:
> Ora, ho predisposto un Form in cui posso selezionare gli utenti facendo un
> filtro su queste specifiche: posso selezionare quale spec filtrare e quale
> valore debba avere. Finché si tratta di una sola specifica non c'è
problema.
> Quando sono più d'una però non so bene come fare. Se faccio:
>
> SELECT * FROM user u JOIN spec_values s ON.... WHERE (s.id_spec=1 and
> s.value=...) OR (s.id_spec=2 and s.value=...)
>
> ottengo gli utenti che hanno id_spec=1 O id_spec=2. Io voglio che valgano
> entrambe le condizioni, ma ovviamente se metto AND tra le due parentesi
non
> ottengo nessun risultato. Ho provato anche utilizzando le sub query ma
senza
> successo.

Quindi se ho capito bene tu vuoi farti ritornare gli utenti che
abbiamo a TRUE tutte le n condizioni che hai messo in quella form,
giusto?

Lo devi fare per forza con una query _tutto compreso_ o puoi anche
usare un certo qualche linguaggio? Tipo javascript o PHP?
In questo caso potresti farti ritornare una "struttura" in cui hai la
lista delle spec_id<->valori che tu hai cercato e allegato la lista
degli utenti che rispettano la singola condizione, successivamente
cerchi se ci sono degli utente che appartengono tutte queste liste. Ti
scrivo questa struttura in JSON

{
  "ricerca" : [
      { "id_spec" : 1,
          "value": "email_cercata",
          "utenti" : [1,2,3,4,5,6]
      },
     {
          "id_spec" : 2,
          "value": "telefono_cercato",
          "utenti" : [3,5,8,9,10]
      }
   ],
   "utenti" : [    //queste sono le info degli utenti che ci sono nei
vari array di sopra
        {"user_id": 1, "name" : "nomeUtente1"},
         .....
         {"user_id": 10, "name" : "nomeUtente1"},
    ]
}

a questo punto gli utenti che tu vuoi, se ho capito bene, dovrebbero
essere 3 e 5, di cui l'array _utenti_ nella risposta ti dice come si
chiamano. Questa soluzione è un po' ibrida nel senso che hai la
generazione della struttra lato server, e poi la ricerca lato client.
Altrimenti potresti fare tutto lato server e rispondere direttamente
con la lista degli utenti. Secondo me la soluzione tutta query è più
complicata che la stessa ricerca fatta con php/javascript.

> Secondo me dovresti cambiare la condizione WHERE della tua query con
l'operatore "IN".
> Dovresti recuperare dalla tua form la lista degli id_spec selezionati e
poi impostare una condizione del tipo:
> WHERE s.id_spec IN ( 1, 2, 8,.... )

Anche io avevo pensato una IN, il problema è che così prendi gli
utenti che hanno un qualche valore in quell'insieme di spec, dopo però
li devi filtrare di nuovo per quelli che hanno tutte le spec che la
form ha richiesto e successivamente controllare che siano uguali i
valori di quelle spec... e che siano tutti uguali.


--
Bonacina Alberto
Website: www.albertobonacina.com

--
Sito BgLUG: http://www.bglug.it
Mailing list: http://lists.linux.it/listinfo/bglug
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.linux.it/pipermail/bglug/attachments/20161105/3faf9f68/attachment.html>


Maggiori informazioni sulla lista bglug