Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    63

    query di ricerca complessa

    salve a tutti vi espongo il mio problema...

    ho una tabella con 18 campi e devo effettuare una ricerca nelle varie righe con i valori che provengono da una form in cui potrò selezionare uno o piu valori tra cui due campi dove potrò inserire un valore minimo e un valore massimo.
    io ho provato con like ma se ad esempio in un campo del form scrivo 25 e 25 si trova sia nel campo A che nel campo D della tabella mi estrapola sia la riga del campo A che del campo D faccio un esempio pratico

    tabella prova campi a, b, c, d

    nella riga con id 1 ho il valore 25 in a e nella riga con id 11 ho il valore 25 in d con la seguente query mi stampa sia la riga 1 che la riga 11 ma in realtà io ho passato da form a=25 e d=33


    in modo da paura ho fatto per tre valori così ma per me è assurdo...
    riuscire a combinare 18 campi


    if ($regione!="tutte" and $tipo!="tutte" and $categoria=="tutte"){$primo="where regione='$regione' and tipo like '%$tipo%'";}else{$primo="";}
    if ($regione=="tutte" and $tipo!="tutte" and $categoria=="tutte"){$secondo="where tipo like '%$tipo%'";}else{$secondo="";}
    if ($regione!="tutte" and $tipo=="tutte" and $categoria=="tutte"){$terzo="where regione='$regione'";}else{$terzo="";}
    if ($regione!="tutte" and $categoria!="tutte" and $tipo=="tutte"){$quarto="where regione='$regione' and categoria='$categoria'";}else{$quarto="";}
    if ($tipo!="tutte" and $categoria!="tutte" and $regione=="tutte"){$quinto="where tipo like '%$tipo%' and categoria='$categoria'";}else{$quinto="";}
    if ($tipo!="tutte" and $categoria!="tutte" and $regione!="tutte"){$sesto="where tipo like '%$tipo%' and categoria='$categoria' and regione='$regione'";}else{$sesto="";}
    if ($regione=="tutte" and $tipo=="tutte" and $categoria!="tutte"){$settimo="where categoria='$categoria'";}else{$settimo="";}

    sostituendo nella query

    $queryi="select id from prova $primo $secondo $terzo $quarto $quinto $sesto $settimo order by id ";

    e per i valori minimo e massimo non so come fare il confronto

    spero per me di essere stato il più chiaro possibile

    grazie e ciao a tutti

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Un modo semplice c'è. (comunque non ho ben capito quello che vuoi fare)

    select * from tabella
    where
    (campo1 = '$campo1' or '$campo1' = '') and
    (campo2 = '$campo2' or '$campo2' = '') and
    (campo3 = '$campo3' or '$campo3' = '')

  3. #3
    potresti conservarti i campi in array associativi
    poi scorrere l'array e vedere se esistono i campi aggiorni una variabile che poi andrai a mettere nella query...

    qualcosa del tipo
    Codice PHP:
    $content = array('regione' => $_POST['regione'],'' => ....)

    $where    ='';
    while( list(
    $key$value) = each($content) ){
    if (
    $value)
    switch (
    $key){
    case 
    'regione' 
    $where .= "&& regione = '".$value."'";
    break;
    ecc... 
    ciaux
    Trinity
    http://www.vocabolariodidio.it
    http://www.giulianodelena.com
    trova la tua casa per le vacanze
    http://www.salento.lecce.it

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    63
    Grazie Badaze e grazie Ndr
    ho adottato la tua soluzione Ndr e funziona alla perfezione ho solo dovuto togliere && alla prima chiamata, ho ancora parecchissimo da studiare.... mi puoi spiegare le righe di codice dove ho messo ???
    PHP:
    --------------------------------------------------------------------------------


    $where =''; // variabile che ad ogni ciclo svuoto
    while( list($key, $value) = each($content) ){ // scompatto l'array
    if ($value) //se la variabile è piena
    switch ($key){ //??? mi puoi spiegare
    case 'tipologia' : //??? mi puoi spiegare
    $where .= "tipologia = '".$value."'"; //assegno il contenuto a $where
    break;
    case 'regione' :
    $where .= "&& regione = '".$value."'";
    break;}
    }
    $query="select * from prova where $where ";
    ecc.
    --------------------------------------------------------------------------------
    ancora un cosa per favore nella form ho anche due campi in cui indico un valore minimo e uno massimo esempio distanza minima 25 distanza massima 45 e mi devono venire fuori tutti i risultati compresi tra 25 e 45 mi viene in mente
    where dist_min=>'$distanza1' and dist_max<='$distanza2'
    dove $distanza1=25 e $distanza2=45
    come posso integrare (sempre che sia corretto) questo nel codice che mi hai suggerito?

    Grazie ancora ad entrambi e ciao

  5. #5
    Codice PHP:

    $where    
    =''// questa non la svuoti ad ogni ciclo ma la setti inizialmente...
    while( list($key$value) = each($content) ){ // scompatto l'array
    if ($value//se la variabile è piena
    switch ($key){ // controllo il contenuto di $key
    case 'tipologia' :  //se e' == a tipologia
    $where .= "tipologia = '$value'"//accodi il contenuto a $where --> accodi... ecco perche' c'erano gli && 
    break;
    case 
    'regione' :
    $where .= "&& regione = '".$value."'";
    break;} 
    case 
    'dist_min':
    $where .= "&& dist_min >= '$value'";
    break;
    $where .= "&& dist_max <= '$value'";
    break;
    }
    $query="select * from prova where $where "
    ecc.
    --------------------------------------------------------------------------------

    where dist_min=>'$distanza1' and dist_max<='$distanza2'

    questo lo fa automaticamente perche' li trova tutti e due e li accoda nella variabile $where

    Trinity
    http://www.vocabolariodidio.it
    http://www.giulianodelena.com
    trova la tua casa per le vacanze
    http://www.salento.lecce.it

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    63
    grazie per avermi aiutato nella soluzione del mio problema
    a presto

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    78

    Up

    Ciao a tutti
    Ho un problema analogo.Vorrei creare un motore di ricerca su 10 tipi di campi diversi, ma per praticità mi limito al campo regione e provincia e la ricerca può essere effettuata su tutte le regioni o per singola regione.Questo vale anche per le provincie.
    Per maggior info vedi thread http://forum.html.it/forum/showthrea...&goto=newpost.
    Al momneto devo ancora risolvere un problema con la possibilià di poter fare questo tipo di scelta ma la domanda è un'altra?
    In linea di massima, Come posso impostare la ricerca su i campi in modo da non crare tanti if o tanti case quanti sono i casi che si possono verificare?
    per esempio su regione e provincia posso avere i seguenti casi:
    all all
    all specifico
    specifico all
    specifico specifico
    Ho letto nel thread di creare degli array ma purtroppo sono nuovo di codex e non c'ho capito granchè, colpa mia.Mi potete suggerire come posso approcciare questa situazione per poi riportarmela globalmente su tutti i campi?
    Grazie a tutti.Stefano.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.