Visualizzazione risultati 1 fino 5 di 5

Discussione: ricerca con più valori

  1. #1
    Guest

    Predefinito ricerca con più valori

    ciao, dunque...

    sono giorni che ci lavoro... io ho un motore di ricerca interno... ho 3 parametri che corrispondono a 3 colonne in una tabella del db...

    cioè

    ricerca1 => colonna1
    ricerca2 => colonna2
    ricerca3 => colonna3

    quindi io nel form per avviare la ricerca specifico i 3 ricerca... una volta avviato lo script mi deve cercare nella colonna1 il valore esatto specificato nel campo ricerca1... nella colonna2 in range tipo da 18 a 30 specificato nel campo ricerca2 e nella colonna3 il valore esatto specificato nel campo ricerca3...

    poi per rendere il tutto più divertente mi servirebbe che se per esempio il campo ricerca2 fosse vuoto non deve cercare niente nella colonna2 e quindi la ricerca sarebbe solo nella colonna1,2 con i rispettivi valori da cercate passati dai campi ricerca1,2...

    spero di essere stato chiaro... grazie... chi sapesse come risolvermi questo inconveniente avrebbe tutto il mio rispetto ed ammirazione...

  2. #2
    L'avatar di smilzo666
    smilzo666 non è connesso Utente
    Data registrazione
    22-09-2003
    Residenza
    La Capitale
    Messaggi
    114

    Predefinito

    Se ho capito bene dovrebbe essere una cosa di questo tipo....

    $query = "";

    /* costruisco la query se almeno una condizione è valorizzata */
    if(!empty($ricerca1) || !empty($ricerca2) || !empty($ricerca3))
    {
    /*
    N.B. la prima condizione 1=1 è sempre vera, nella costruzione dinamica
    delle query, serve per non doversi preoccupare se mettere o meno il
    primo AND
    */
    $query = "select [campi] from [tabella] where 1=1";
    if(!empty($ricerca1))
    $query = $query." AND campo1 = ".$ricerca1;
    if(!empty($ricerca2))
    $query = $query." AND campo2 = ".$ricerca2;
    if(!empty($ricerca3))
    $query = $query." AND campo3 = ".$ricerca3;

    /* Eseguo la query */
    }


    In questo modo le condizioni della query vengono create solo in base alla presenza di ogni singolo valore (se il valore non c'è la condizione non viene aggiunta).

    Per il campo2 non ho capito cosa intendi, per effettuare una ricerca in range bisogna avere due valori, min e max (es. ricerca2_min e ricerca2_max):
    e di solito la query si crea così:

    if(!empty($ricerca2_min))
    $query = $query." AND campo2 >= ".$ricerca2_min;
    if(!empty($ricerca2_max))
    $query = $query." AND campo2 <= ".$ricerca2_max;


    in questo modo ci sono 3 condizioni:

    1) ricerca2_min è valorizzato, ricerca2_max no:
    il campo2 deve essere maggiore o uguale a ricerca2_min.
    2) ricerca2_max è valorizzato, ricerca2_min no:
    il campo2 deve essere minore o uguale a ricerca2_max.
    3) sono valorizzati entrambi:
    il campo2 deve essere un valore tra ricerca2_min e ricerca2_max compresi.

    E' questo che intendevi?
    "Vuoi rendere impossibile per chiunque opprimere un suo simile? Allora, assicurati che nessuno possa possedere il Potere."
    - M. Bakunin -

  3. #3
    Guest

    Predefinito

    si, quindi combinando tutta la pappardella che query dovrebbe uscire fuori?

  4. #4
    L'avatar di smilzo666
    smilzo666 non è connesso Utente
    Data registrazione
    22-09-2003
    Residenza
    La Capitale
    Messaggi
    114

    Predefinito

    Quindi è così:

    /* costruisco la query se almeno una condizione è valorizzata */
    if(!empty($ricerca1) || !empty($ricerca2_min) || !empty($ricerca2_max) || !empty($ricerca3))
    {
    /*
    N.B. la prima condizione 1=1 è sempre vera, nella costruzione dinamica
    delle query, serve per non doversi preoccupare se mettere o meno il
    primo AND
    */
    $query = "select [campi] from [tabella] where 1=1";
    if(!empty($ricerca1))
    $query = $query." AND campo1 = ".$ricerca1;
    if(!empty($ricerca2_min))
    $query = $query." AND campo2 >= ".$ricerca2_min;
    if(!empty($ricerca2_max))
    $query = $query." AND campo2 <= ".$ricerca2_max;
    if(!empty($ricerca3))
    $query = $query." AND campo3 = ".$ricerca3;

    /* Eseguo la query */
    }


    Il risultato varia a seconda che ricerca1, ricerca2_min, ricerca2_max e ricerca3 siano valorizzati o meno.

    quindi può uscire una query come:

    select [campi] from [tabella] where 1=1 AND campo1 = $ricerca1
    (se è valorizzato solo ricerca1)

    o:

    select [campi] from [tabella] where 1=1 AND campo1 = $ricerca1 AND campo2 >= $ricerca2_min AND campo2 <= $ricerca2_max AND campo3 = $ricerca3
    (se sono valorizzati tutti i filtri)
    "Vuoi rendere impossibile per chiunque opprimere un suo simile? Allora, assicurati che nessuno possa possedere il Potere."
    - M. Bakunin -

  5. #5
    Guest

    Predefinito

    grazie smilzooooooooooooooooooo

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •