Newsgroup: it.comp.www.php
Titolo: Query per visualizzare nomi che iniziano con A

Scusate la domanda banale, ma come posso scrivere una query
che mi elenchi tutte le righe in cui 'nome' inizia, ad es., con
'A'?
Bow-wow
Killer

 'A'?
Bastava sbattersi un po' per capire come fare :D
SELECT * FROM `gioco` WHERE nome REGEXP "^A"
Bow-wow
Killer

 ha sentenziato:

Forse è possibile anche seneza scomodare le regexp (che
suppongo appesantire il lavoro) :
SELECT * FROM gioco WHERE nome like 'A*'
Non so se la sintassi è corretta, ma basta usare i caratteri
jolly .
-- 
WEbdOM webmaster di
Metronic.It mobile phone philosophy
www.gadgetpoint.it
 serigrafia on line

 jolly .
Ho appena letto su una pagina web che la sintassi dovrebbe essere
SELECT * FROM gioco WHERE nome LIKE 'A%'
pero' a me servirebbe, ad es., sapere anche tutti quelli che iniziano
per un numero e non lo riesco a fare con il LIKE, mentre con il
REGEXP ci riesco
SELECT * FROM gioco WHERE nome REGEXP "^[0-9]"
funziona, mentre
SELECT * FROM gioco WHERE nome LIKE '[0-9]%'
non funziona (ovviamente perche' non la so' utilizzare.
Di quanto "perdo" in termini di prestazioni usando REGEXP?
Grazie ancora
Killer

 --
Mi trovo con te ma il carattere jolly per indicare un numero qualsiasi di
caratteri in SQL non è la percentuale?
SELECT * FROM gioco WHERE nome like 'A%'
Bye
giaconet

 Di quanto "perdo" in termini di prestazioni usando REGEXP?
boh! te ne accorgeresti solo con qualche migliaio di record, penso!
ciao

 Di quanto "perdo" in termini di prestazioni usando REGEXP?
Non molto, perche' l'assertion riesce subito all'inizio. Cmq. meglio usare:
SELECT * FROM gioco WHERE nome >='0' and nome <':'
':' e' il carattere ascii dopo il 9,
nome <= '9' non va bene oppure fai:
nome <='9z' (ma non mi sembra buono come soluzione).
o sei vuoi
SELECT * FROM gioco WHERE nome like '0%' or nome like '1%' or nome like '2%'
or nome like '3%' ........
invece se pretendi nome con ^[0-9A]:
SELECT * FROM gioco WHERE (nome >='0' and nome <':') or (nome like 'A%')
Alla fine perdi molto se non metti un Indice sul campo nome. Molto piu'
relevante in termine di prestazione che la questione REGEXP versus LIKE.

 SELECT * FROM gioco WHERE nome >='0' and nome <':'
[CUT]
Il mio desiderio e' che la pagina possa essere chiamata in piu' modi.
Cioe', se chiamo
lista_game.php
mi da l'elenco senza nessuna verifica sul nome, mentre con, ad es.
lista_game.php?margine='A' oppure lista_game.php?margine='[0-9]'
mi elenca, rispettivamente, i nomi che iniziano con A e quelli che
iniziano con un numero.
Usando REGEXP ci sono riuscito abbastanza facilmente senza
dover dividere i vari casi, ma ho paura che quandoil database sara'
pieno (circa 4000 record) questo metodo diventi troppo lento...
Diverra' lento o lo posso lasciare cosi'?
Grazie ancora
Killer

 wrote in message
news:LFWW7.47$8D5....@news2.tin.it...

4000 non e' molto. Per testare come si comporta potresti generare 4000
record a caso per vedere come si comporta in quel caso.
Come dicevo, importante che metti un indice sulla tabella (viene spesso
dimenticato, ma e' veramente importante se crei un database efficiente):
Lo puoi aggiungere a mano:
    ALTER TABLE game ADD INDEX(nome);
oppure nella creazione della tabella
    CREATE TABLE Anagrafica (
       ID int(11) DEFAULT '0' NOT NULL auto_increment,
       nome varchar(96) NOT NULL,
       PRIMARY KEY (ID),
       KEY nome (nome) /* index su nome */
    );
Avviso importante per la sicurezza:
    usando: lista_game.php?margine=[0-9]
e tu metti in php nella query qualcosa come: $query= "[...] REGEXP
('^$margine')'";
si potrebbe fare una richiesta al server:
    lista_game.php?margine=[0-9]'); DELETE FROM game;
effettuando una query tipo:
    REGEXP ('^[0-9]'); DELETE FROM game;');
E dal esterno il tuo database va nel Nirvana dei dati
Crea un errore SQL, ma troppo tardi, tutta la tabella cancellata...
:,',','-(
Quindi meglio fare una distinzione dei casi per avere il controllo sulla
query (oppure filtrare parole chiavi, limitare caratteri possibili).

 :,',','-(
ROTFL! (Mica tanto, mi gioco il database...)
Ecco cosa succede a voler fare tutto subito :D
Il fatto e' che "programmo" in PHP da soli 2 giorni. Meglio rallentare
prima di fare danni seri..
Grazie ancora
Killer

 Ehm, cosa si intende per "indice"? A cosa mi serve?
Leggi qui...
http://www.html.it/faq/sql/21.htm

 
http://www.html.it/faq/sql/21.htm
Giusto, le FAQ prima di tutto :D
Grazie ancora
Killer