Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Motore di ricerca con molti parametri

    ciao!
    vorrei fare una domanda, forse inutile, per la creazione di un motore di ricerca per un sito che sto sviluppando.
    in pratica il motore può ricercare per diversi parametri, tutti in AND se settati.
    i parametri sono:
    -anno (unico parametro obbligatorio)
    -collezione
    -da data a data
    -da numero a numero
    -cliente codice
    -cliente ragione sociale
    -stato

    di primo acchitto mi verrebbe da fare tutta una serie di if / switch,
    però questo vorrebbe dire testare parecchie combinazioni, tipo:
    -solo anno
    -anno più codice cliente
    -anno più codice cliente più collezioe
    -anno più collezione pià da numero a numero
    -ecc.....

    c'è un meccanismo per facilitare l'interrogazione con tutti questi parametri??
    oppure mi devo un miliardo di if e in base ai parametri passati creare la query??

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Codice PHP:
    $query "SELECT * FROM tabella WHERE 1 ";

    if ( 
    $anno != ''$query .= " AND anno={$anno} ";
    if ( 
    $cod_cliente != ''$query .= " AND cod_cliente={$cod_cliente} ";
    if ( 
    $collezione != ''$query .= " AND collezione={$collezione} ";
    ... 
    Ultima modifica di Alhazred; 14-05-2014 a 09:59

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Ah, non avevo notato che l'anno è obbligatorio, quindi lo puoi integrare nella stringa iniziale della query che diventerà

    "SELECT * FROM tabella WHERE anno={$anno} ";

    e l'if relativo ad $anno andrà tolto.

  4. #4
    ecco qua:
    Codice PHP:
        public function cercaOrdine($anno$collezione ''$daNumero ''$aNumero ''$daData ''$aData ''$codiceCliente ''$ragSoc ''$stato '') {
            
    $cmd 'SELECT * FROM cr_tesord_agenti
                INNER JOIN cr_clienti ON fk_cliente = cliente_id
                WHERE YEAR(tesord_data_creato) = ' 
    $anno;
            if (!empty(
    $collezione)) {
                
    $cmd .= ' AND tesord_collezione = "' $collezione '"';
            }
            if (!empty(
    $daNumero) && !empty($aNumero)) {
                
    $cmd .= ' AND tesord_id BETWEEN ' $daNumero ' AND ' $aNumero;
            }
            if (!empty(
    $daData) && !empty($aData)) {
                
    $cmd .= ' AND tesord_data_creato BETWEEN CAST("' $daData '" AS DATETIME) AND CAST("' $aData '" AS DATETIME)';
            }
            if (!empty(
    $codiceCliente)) {
                
    $cmd .= ' AND cliente_codice = ' trim($codiceCliente);
            }
            if (!empty(
    $ragSoc)) {
                
    $cmd .= ' AND cliente_ragsoc LIKE "%' trim(strtoupper($ragSoc)) . '%"';
            }
            if (
    $stato != '') {
                
    $cmd .= ' AND tesord_inviato = ' $stato;
            }
    //        var_dump($this->conn->execQuery($cmd, TRUE));
            
    return $this->conn->execQuery($cmdTRUE);
        } 
    considerando che per ora ho solo due record nella tabella, pare funzionare.
    grazie per il suggerimento!!

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.