Newsgroup: it.comp.software.database
Titolo: filtro su molti dati

Ciao a tutti.
Ho una tabella che conterrà milioni di dati ed ho la necessità di filtrare
in fase di visualizzazione determinati record contenuti nella tabella.
Soluzione 1.
Metto in un'altra tabella i criteri di filtro, e filtro in fase di
visualizzazione.
es.
   campo1, %, campo3, %                     --------> filtrera i record con
campo 1 e 3 uguali a questi
    %,Campo2, Campo3, Campo4          -------> filtrerà i record con campo
2, 3 , 4 uguali a questi
    campo1, campo2, campo3,campo4     ------> filtrerà i record identici a
questo
      %,%,%,%                                     -------> filtrerebbe tutto
il % indica che vanno filtrati tutti i valori di quel campo.
la soluzione funziona ma mi inpedisce di paginare la pag. di risultato dato
che non posso prevedere a priori i record che verranno filtrati.
Soluzione 2
Aggiungo un flag direttamente alla tabella che devo visualizzare, impostando
a true i record che non devono essere visualizzati.
In questo caso pero oggni volta che inserisco o tolgo un filtro dovrei fare
milioni di update....credo che impiegherebbe troppo tempo..
spero di essere stato abbastanza chiaro.
cosa mi suggerite?
se avete altre soluzioni :) vi ascolto

 in fase di visualizzazione determinati record contenuti nella tabella.
Sarebbe opportuno tu dicessi che database utilizzi prima di tutto.
Per quanto riguarda la "paginazione", puoi fare una Select COUNT(*)...
prima di fare la Select "vera" e sapere quanti record ti arrivano.
Davide

 ha scritto nel messaggio
news:aen7gj$7qbjj$1...@ID-18487.news.dfncis.de...

uso mysql.
Non posso usare il count(*) perchè il filtro non lo faccio sulla queery
grazie ciao.

 prima di fare la Select "vera" e sapere quanti record ti arrivano.
in questo modo ti faresti una doppia scasione di tabella!
vista la vastità di filtri, anche di indici non se ne parla.
se il db lo supporta, si potrebbero creare viste ingroppate...
ciao
-- 
Punkarruso
mail:punkarruso(at)geniotradottoininglese(dot)it
pubblicità progresso:
http://www.gnu.org/philosophy/motivation.it.html

 ciao
mysql non le supporta.
grazie

 mysql non le supporta.
eh, lo so! ho letto solo DOPO che il db era quello!
-- 
Punkarruso
mail:punkarruso(at)geniotradottoininglese(dot)it
pubblicità progresso:
http://www.gnu.org/philosophy/free-world.html

 eh, lo so! ho letto solo DOPO che il db era quello!
 ok ok :-)

visualizzazione.
CREATE TABLE test1 ( campo1 varchar, campo2 varchar, campo3 varchar );
CREATE TABLE filtri ( filtro, campo, operatore, operando1, operando2 ); 
Fase 1:
	Crei una query SQL
	SELECT * FROM filtri WHERE filtro = 'pippo';
	WHERE = '';
	Comma = '';
	{{
	switch(operatore)
		case '<','>','!=','==','~','>=','<=':
			WHERE &= Comma && '(' && campo && operatore \
				&& '''' && operando1 && ''')'
			Comma = ' AND ';
		case 'between':
			WHERE &= Comma && '(' && campo && '>=' \
				&& '''' && operando1 && ''' AND' && \
				campo && '<=' & operando2 && ''')'
			Comma = ' AND ';
		case '(null)','any':
			// Niente
	end
	}}
A questo punto ti ritrovi una mega-query SQL del tipo
	SELECT * FROM tuatabella WHERE
		( campo1 > 'pippo' ) AND ( campo2 > 'pluto' AND campo2 <
'zio paperone');
...certo, MySQL non ci si divertira', ma almeno non devi farci una JOIN...
Leonardo creativo
-- 
".signature": bad command or file name