[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: query complicata con espressioni regolari



mmmm ho fatto alcune correzzioni a questa bozza.
Quello che mi scoccia è che lavorando cosí va a aggiornare tutti i
post del database, sia che siano da modificare o meno.
Bisognerebbe trovare il modo per detectare che il post è da moficicare
e poi mettere una condizione if

-----------------------

#!/bin/bash
source config.conf

max_post_id=$(mysql --database="$MYDB" --user=$USER
--password="$PASSWD" -e "SELECT MAX(post_id) AS post_id FROM
phpbb_posts;")
#"
max_post_id=$(echo $max_post_id | sed 's|^post_id ||')
echo max_post_id=$max_post_id # numero da usare per il ciclo for o while

# solo per test test
#post_id=100000

while [ $max_post_id = 0 ]; do  # ciclo while ecluso per test
    post_username=$(mysql --database="$MYDB" --user=$USER
--password="$PASSWD" -e "SELECT post_username FROM phpbb_posts WHERE
post_id= $max_post_id;")
    post_username=$(echo $post_username | sed 's|^post_username ||')
    echo post_username=$post_username

    post_text=$(mysql --database="$MYDB" --user=$USER
--password="$PASSWD" -e "SELECT post_text FROM phpbb_posts WHERE
post_id= $max_post_id;")
    post_text=$(echo $post_text | sed 's|^post_text ||')

    new_post_text=$(echo $post_text | sed
"s|\[quote:\([a-zA-Z0-9]*\)\]$post_username,\([0-9/]*\),
\([0-9:]*\)\]<br>||I")
    echo $new_post_text
    mysql --database="$MYDB" --user="$USER" --password="$PASSWD" -e
"UPDATE phpbb_posts SET post_text = \"$new_post_text\" WHERE post_id =
\"$max_post_id\""

    let max_post_id=max_post_id-1
done

exit




-----------------------

Il 13/02/15, MaX<maxlinux2000@gmail.com> ha scritto:
> opss  rileggento ho visto un errore:
>
> while [ $post_id = 0 ]; do  -->  while [ $max_post_id = 0 ]; do
>
> Il 13/02/15, MaX<maxlinux2000@gmail.com> ha scritto:
>> pensavo di fare una cosa del genere, ma si tratta di 400.000 post, e
>> non si se è abbastanza veloce
>>
>> --------------------------------------
>> source config.conf
>>
>> post_id=$(mysql --database="$MYDB" --user=$USER --password="$PASSWD"
>> -e "SELECT MAX(post_id) AS post_id FROM phpbb_posts;")
>>
>> max_post_id=$(echo $post_id | sed 's|^post_id ||')
>> #echo max_post_id=$max_post_id # numero da usare per il ciclo for o while
>>
>> while [ $post_id = 0 ]; do
>>
>>     post_username=$(mysql --database="$MYDB" --user=$USER
>> --password="$PASSWD" -e "SELECT post_username FROM phpbb_posts WHERE
>> post_id= $post_id;")
>>     post_username=$(echo $post_username | sed 's|^post_username ||')
>> #    echo post_username=$post_username
>>
>>     post_text=$(mysql --database="$MYDB" --user=$USER
>> --password="$PASSWD" -e "SELECT post_text FROM phpbb_posts WHERE
>> post_id= $post_id;")
>>     post_text=$(echo $post_text | sed 's|^post_text ||')
>>
>>     new_post_text=$(echo $post_text | sed
>> "s|\[quote:3pjjad9s\]$post_username&#44;\([0-9/]*\)&#44;
>> \([0-9:]*\)\]<br>||I")
>> #    echo $new_post_text
>>     mysql --database="$MYDB" --user="$USER" --password="$PASSWD" -e
>> "UPDATE phpbb_posts SET post_text = \"$new_post_text\" WHERE post_id =
>> \"$post_id\""
>>
>>     let post_id=post_id-1
>> done
>> --------------------------------------------
>>
>> ...che ne dite?
>> MaX
>>
>> Il 13/02/15, MaX<maxlinux2000@gmail.com> ha scritto:
>>> ciao a tutti
>>>
>>> avrei un problema con le espessioni regolari dentro ad una query mysql
>>> inglobata a sua volta in uno script  :)
>>>
>>> chpass() {
>>> mysql --database="$MYDB" --user="$USER" --password="$PASSWD" -e
>>> "UPDATE phpbb_users
>>> SET user_password = \"$HPPASS\" WHERE username = \"$PHPBB_USER\""
>>> }
>>>
>>> questo sopra è un esempio che uso per modificare via script la passwd
>>> di un utente in phpbb.
>>>
>>> Ora peró vorrei cancellare una parte di testo dal campo "
>>> phpbb_posts/post_text" ma solo se dentro a questo testo appare:
>>> [quote]nome utente,20/7/2012, 19:54] e il nome utente coicide con il
>>> relativo campo " phpbb_posts/post_username"
>>>
>>> Praticamente c' è da cancellare la linea "[quote]Alfredo,20/7/2012,
>>> 19:54]" solo se nel campo  "post_username" il nome coincide con
>>> "Alfredo".
>>>
>>> A complicare le cose... la data di fianco è variabile, e il
>>> "[quote]Alfredo,20/7/2012, 19:54]"
>>> è sempre nella seconda linea
>>>
>>> Come se non bastasse, se nel messsaggio compare un
>>> "[quote]Alfredo,20/7/2012, 19:54]", ma nel "post_username" il nome è
>>> differente da "Alfredo", allora bisogna lasciarlo.
>>>
>>> ..e naturalmente il resto del messaggio deve rimanere inalterato.
>>>
>>> qualche idea?
>>>
>>> io stavo pensando di estrarre il post_id,post_text,post_text con una
>>> query, fare le comparazioni con gli strumenti della shell linux,
>>> togliere eventualemente il testo e poi reimmettere il testo modificato
>>> usando come riferimento il post_id
>>>
>>> o ci sono soluzioni migliori... e più rapide... interne a mysql?
>>>
>>> ciao
>>> MaX
>>>
>>
>>
>> --
>> ciao,
>> MaX
>>
>
>
> --
> ciao,
> MaX
>


-- 
ciao,
MaX


Reply to: