Mi han chiesto di realizzare, OLTRE al filtro avanzato, anche un filtro che abbia una unica textbox, ma che poi effettui il search in OR su piu cambi.
Immaginiamo, ma non è questo il caso, di avere nome, cognome, indirizzo, razza del cane, in campi separati. L'utente deve poter cercare 'giulio' o 'labrador' tramite quell'unica textbox... è possibile una cosa del genere!?
La sql sarà " .. WHERE nome LIKE '%giulio%' OR cognome LIKE '%giulio%' OR razza LIKE '%giulio%' OR ... "
ovviamente il tutto case insensitive, ma questo credo lo faccia già mysql
Questo filtro verrà mostrato come predefinito, e sarà in una view diversa rispetto al filtro avanzato _search, in quanto solo uno dei due per volta potrà essere usato. Il che non fa una piega.
Page 1 of 1
[Risolto] Admin View: Un Unico Textbox Per La Ricerca In Or Su Multipli Campi ... il cliente non finisce mai di stupire...
#1
Posted 11 October 2012 - 04:22 AM
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
Ricordalo quando fai il debug
#2
Posted 11 October 2012 - 04:42 AM
Aggiungi una proprieta' al model
Mettilo fra i safe attribute per la search e scrivi la condition:
Oltre ovviamente a mettere la textbox da qualche parte.
Spero vivamente per voi che le tabelle siano piccole, perche' se sperate di trovare qualcosa in questo millenio cercando fra migliaia di record con like ho brutte notizie per voi.
Nel caso di ricerche su grandi dati, usate sphinx.
public $text_search;
Mettilo fra i safe attribute per la search e scrivi la condition:
$criteria=>addCondition("(nome LIKE '%:nome%' OR cognome LIKE '%:nome%' OR razza LIKE '%:nome%' )");
$criteria->params[':nome']=$this->text_search;Oltre ovviamente a mettere la textbox da qualche parte.
Spero vivamente per voi che le tabelle siano piccole, perche' se sperate di trovare qualcosa in questo millenio cercando fra migliaia di record con like ho brutte notizie per voi.
Nel caso di ricerche su grandi dati, usate sphinx.
#3
Posted 11 October 2012 - 05:22 AM
mi da zero risultati dopo aver provato ad eseguire questa SQL, si noti il parametro NON sostituito
SELECT COUNT(DISTINCT `t`.`id`) FROM `cprol_users` `t` LEFT OUTER JOIN `cprol_languages` `languageObj` ON (`t`.`languageId`=`languageObj`.`id`) WHERE ((username != 'root' ) AND ((username LIKE '%:freeSearch%' OR realname LIKE '%:freeSearch%' OR email LIKE '%:freeSearch%' )))
SELECT COUNT(DISTINCT `t`.`id`) FROM `cprol_users` `t` LEFT OUTER JOIN `cprol_languages` `languageObj` ON (`t`.`languageId`=`languageObj`.`id`) WHERE ((username != 'root' ) AND ((username LIKE '%:freeSearch%' OR realname LIKE '%:freeSearch%' OR email LIKE '%:freeSearch%' )))
$criteria->addCondition("(username LIKE '%:freeSearch%' OR realname LIKE '%:freeSearch%' OR email LIKE '%:freeSearch%' )");
$criteria->params[':freeSearch']=$this->freeSearch;
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
Ricordalo quando fai il debug
#4
Posted 11 October 2012 - 05:25 AM
Non dovresti usare mai $_GET nei model, usa if ($this->freeSearch)
Magari il bottone cerca manda anche la freesearch vuota e ti causa qualche problema.
Magari il bottone cerca manda anche la freesearch vuota e ti causa qualche problema.
#5
Posted 11 October 2012 - 05:28 AM
Devi fare cosi':
Mettere i percenti nel param e non nella condition, non ci ho pensato prima.
$criteria->addCondition("(username LIKE :freeSearch OR realname LIKE :freeSearch OR email LIKE :freeSearch)");
$criteria->params[':freeSearch']='%'.$this->freeSearch.'%';Mettere i percenti nel param e non nella condition, non ci ho pensato prima.
#6
Posted 11 October 2012 - 05:31 AM
Questo va a meraviglia ! Grazie
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
Ricordalo quando fai il debug
Share this topic:
Page 1 of 1

Help













