Escludere stringhe contenute nei record da una select

peppeocchi

Utente Attivo
20 Apr 2013
30
0
0
Salve,

Come da titolo, devo escludere una serie di stringhe che possono essere contenute in una tabella.

Ad esempio l'utente inserisce come stringhe da escludere "parola1, parola2, parola3".

Come soluzione ho optato per forzare l'utente ad inserire le stringhe come "parola1|parola2|parola3" passando quindi alla query (da php) una variabile contenente la stringa "parola1|parola2|parola3"
Quindi nella query ho
Codice:
select *
where campo NOT REGEXP '$variabile'

In linea di massima questa query funziona, ma quando un utente inserisce una parola tipo "ciao$ciao|parola2|parola3", la prima ovviamente non viene esclusa, ma solo parola2 e parola3.

Idee alternative?

Grazie :)
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Vuoi che l'utente sia impossibilitato ad inserire delle parole decise da te?
Se si, quando l'utente inserisce una frase, controlli che in essa non ci sia quello che tu hai escluso.
Se l'unico problema è quello che hai constatato ci sia potresti utilizzare una explode fuori (sto dando per scontato che hai php-mysql, correggimi se sbaglio) e prendi le 3 parole separate per poi rifare un implode per unirle così come servono a te.
 

peppeocchi

Utente Attivo
20 Apr 2013
30
0
0
Si e no.
L'utente deve compilare un form per effettuare una ricerca, come esempio diciamo che deve cercare degli utenti di diverse città.

In questo form l'utente può inserire delle città da escludere dalla ricerca (non si conoscono a priori i nomi delle città, e fare una select delle città disponibili diventa un'operazione troppo costosa (su 80000 record) sommata a tutte le altre che l'applicazione già fa di base).

I nomi delle città salvate nel database possono contenere anche caratteri speciali, ad esempio può essere una lista tipo questa:

Milano
Rom$a
Altr$città

Quindi l'utente per escludere determinate città, le inserisce così come sono scritte, se vuole escludere Rom$a scriverà esattamente così (l'utente sa esattamente cosa inserire perchè sono dati di un'applicazione esterna alla mia).

Per semplificarmi il lavoro, forzo l'utente ad inserire le città da escludere separate da "|" in modo da dare direttamente in pasto a REGEXP la stringa passata (evitando di fare explode/implode con php).

Quindi diciamo i caratteri della stringa passata non li posso cambiare, altrimenti la ricerca non è corretta.

Probabilmente la soluzione migliore è quella di fare un explode con php e costruire la query con un ciclo.

A questo proposito, è più veloce una query tipo:

Codice:
select * from tabella where nome not in (nome1,nome2,nome3)
o
Codice:
select * from tabella where nome != 'nome1' and nome != 'nome2' and nome != 'nome3'
o sono la stessa identica cosa in termini di prestazioni?
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Guarda per vedere quale è più efficiente basta fare delle prove e vedere i tempi di esecuzione.
Se chiedi quale è più leggible ovviamente il primo e si può facilmente adattare per più parole senza mettere mano alla query.
 
Discussioni simili
Autore Titolo Forum Risposte Data
M [PHP] Escludere campi non valorizzati PHP 22
danjde [MySQL] Escludere specifico valore dalla query select MySQL 3
D Come posso escludere una pagina dalle regole di htaccess? Web Server 0
S [PHP] Selezionare ultimo campo ed escludere doppioni PHP 16
M [PHP] Escludere i record con pratica conclusa PHP 26
M Escludere dati da una query PHP 15
M Datetimepicker - escludere orari + step di 30 minuti jQuery 0
T Funzione per redirect versione mobile: escludere i tablet Javascript 1
novello88 escludere un post dal flusso RSS WordPress 0
Shyson Escludere un css codice dalla home PHP 17
M Escludere 2 select da una select MySQL 9
M Escludere dei parametri da una SELECT MySQL 7
MarcoGrazia Operatore IN e stringhe CSV PHP 3
F confrontare due stringhe "numeriche" PHP 7
Alex_70 Stringhe duplicate PHP 36
R Tradurre stringhe con php e google translator PHP 4
A Cercare un carattere uguale in due stringhe Java 5
P [PHP] Inserire stringhe in input(text),memorizzarle e stamparle in file successivo PHP 0
E [PHP] confrontare stringhe importate da csv PHP 19
M [PHP] Stringhe con accento nel POST PHP 3
M [java] esercizio lunghezza array di stringhe Java 0
K [WordPress] editare stringhe di deafault WordPress 0
S [Javascript] [HTML] creare stringhe di riferimento da riutilizzare Javascript 5
B [Java] Stringhe binarie Java 0
venomina [MySQL] Stringhe vuote MySQL 0
E [PHP] Operazioni di confronto su stringhe PHP 26
G [PHP] Operazioni sulle stringhe PHP 2
D [Problema] Comparare stringhe Sviluppo app per Android 0
S stringhe con caratteri speciali PHP 3
A Problema con stringhe e numeri interi PHP 2
M Stringhe con caratteri non codificati (es. �) PHP 1
xone Filtrare e ripulire stringhe in input PHP 1
F Controllo tra due stringhe jQuery 5
K formattazione stringhe Javascript 1
K alcuni chiarimenti sul metodo di ricerca nelle stringhe o array Javascript 1
K problema di sintassi con le stringhe PHP 5
F spazi stringhe PHP 3
N Confrontare due Stringhe PHP 2
S Stringhe: confrontare immissione con stringa d'esempio e costruire stringhe da più campi PHP 10
M Estrapolare stringhe da una funzione PHP 7
M Dividere Stringhe per MySQL PHP 6
G Confrontare due stringhe PHP 11
F confrontare due stringhe c Programmazione 0
N Modifica valori stringhe di un altro file PHP 7
SolidSnake4 stringhe PHP 7
F programma con le stringhe in c!! Programmazione 0
N [PHP/MySQL] Problema inserimento stringhe ' or ', ' and ' PHP 2
L Problema concatenzione stringhe PHP 2
P Sostituzione stringhe sulla base di una tabella di conversione MySQL 2
catellostefano stringhe strane nell'header di template joomla Joomla 4

Discussioni simili