|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Nov 2004
Città: R.E.
Messaggi: 222
|
[Mysql] Match con regular expression e ritorno stringa
Ciao a tutti ho un DB mysql su macchina redhat, tale DB contiene una tabella chiamata TabellaLog così descritta
+-------------------+--------------+------+-----+---------+----------+ | Field | Type | Null | Key | Default | Extra | +-------------------+--------------+------+-----+---------+----------+ | id | int(11) | NO | PRI | NULL | auto_increment | | timestamp | int(14) | NO | MUL | 0 | | | filename | varchar(255) | NO | MUL | | | | log | longtext | NO | | NULL | | | exit_code | varchar(4) | NO | | | | +-------------------+--------------+------+-----+---------+-----------+ il campo "log" contiene vari dati tra cui la dimensione (tramite un "ls -l" della shell)di un file trasferito. ad esempio l'inizio del log potrebbe inziare come -rwxrwxr-x 1 user user 67550 Jun 17 17:30 /var/tmp/file1.txt Avrei necessità di sapere se esiste un comando (simile al grep) per eseguire una query che mi restituisca il match trovato in base ad una regular expression. Se ad esempio eseguo la query Codice:
select id, log REGEXP 'user\ +user\ +[0-9]' as pippo from TabellaLog order by pippo; +-------+-------+ | id | pippo | +-------+-------+ | 33095 | 0 | | 33096 | 0 | | 33097 | 0 | | 33098 | 0 | | 33100 | 0 | ...... .. | 33094 | 1 | | 33099 | 1 | | 33102 | 1 | | 33103 | 1 | | 33104 | 1 | ..... ... poiche REGEXP restuisce solo il valore 0 o 1 in base se non trova o trova il pattern della regexp...a me invece serve un comando che mi restituisca anche la stringa (es "user user 67550"). In particolare devo estrarre il valore numerico (che è la dimensione del file contenuto nel campo log) da usare come "order by" per ordinare la "select * from "TabellaLog" ecc ecc". In modo da eseguire un'unica query che possa usare in una pagina php per creare una tabella html ordinata per la dimensione dei file...considerando che la dimensione di tali file non è un campo della tabella mysql ma una stringa contenta nel campo log della tabella. Grazie a chiunque vorrà aiutarmi
__________________
Cooler Master Silencio 652S | Msi Z170A Gaming M5 | Intel skylake i5-6600K @ 4,7 Ghz + dissi liquid Arctic Freezer 240 | DDR4 16GB G.SKill 3000 CL15 KIT (2x8GB) 16GTZB Trident Z | nVidia Gigabyte GTX980TI 6GB Extreme Gaming | Samsung evo SSD 256GB | BeQuiet L8-730W Pure Power Modular | Acer XB Predator XB271HU IPS 27" 2K |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Nov 2004
Città: R.E.
Messaggi: 222
|
Nessuno nessuno esperto di mysql
__________________
Cooler Master Silencio 652S | Msi Z170A Gaming M5 | Intel skylake i5-6600K @ 4,7 Ghz + dissi liquid Arctic Freezer 240 | DDR4 16GB G.SKill 3000 CL15 KIT (2x8GB) 16GTZB Trident Z | nVidia Gigabyte GTX980TI 6GB Extreme Gaming | Samsung evo SSD 256GB | BeQuiet L8-730W Pure Power Modular | Acer XB Predator XB271HU IPS 27" 2K |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Jun 2011
Messaggi: 3
|
Forse non è che non esistono esperti mysql, ma che il tuo post è poco leggibile.
Ad esempio la definizione della tabella avresti potuto inserirla così: Codice:
Field | Type | Null | Key | Default | Extra id | int(11) | NO | PRI | NULL | auto_increment timestamp | int(14) | NO | MUL | 0 | filename | varchar(255) | NO | MUL | | log | longtext | NO | | | exit_code | varchar(4) | NO | | | In ogni modo, perché vuoi usare un espressione regolare? Non puoi scrivere semplicemente una query tipo: Codice:
SELECT id,
CAST(SUBSTRING(log,
POSITION('user user',log) + 10,
POSITION('/',log)-POSITION('user user',log) - 24)
AS INTEGER) AS pippo
FROM TabellaLog
WHERE log LIKE '% user user %'
ORDER BY pippo;
Ciao |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Nov 2004
Città: R.E.
Messaggi: 222
|
So che sono passati quasi 3 mesi ma volevo ringraziarti, perchè alla fine ho risolto con un metodo simile a quello che mi hai proposto.
Grazie ancora e scusa del ritardo con il quale te lo dico Ciao
__________________
Cooler Master Silencio 652S | Msi Z170A Gaming M5 | Intel skylake i5-6600K @ 4,7 Ghz + dissi liquid Arctic Freezer 240 | DDR4 16GB G.SKill 3000 CL15 KIT (2x8GB) 16GTZB Trident Z | nVidia Gigabyte GTX980TI 6GB Extreme Gaming | Samsung evo SSD 256GB | BeQuiet L8-730W Pure Power Modular | Acer XB Predator XB271HU IPS 27" 2K |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Jun 2011
Messaggi: 3
|
Ringraziamenti e scuse accettate
![]() Ciao |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:30.





















