Teoria su una query

Aperto da Flavio93Zena, Martedì - 30 Giugno 2015 - 21:43

0 Utenti e 1 Visitatore stanno visualizzando questa discussione.

Flavio93Zena

Forse stanotte ero troppo stanco ma ho avuto un'idea in caso uno volesse cambiare dominio.
Allora. Diciamo che l'admin ha un forum (con messaggi e link che rimandano ad altri topic o esterni etc etc) e vuole assolutamente cambiare l'URL - se io dico:
-Cambia URL;
-Usa repair_settings.php (scontato ma vabbè);
-Lancia una query per modificare tutti i link del forum (custom titles, link delle mod, link nei topic etc) dicendo di selezionare in tutto il database il primo URL e rimpiazzarlo con il secondo? Qualcosa del tipo select replace linkalsito1.com to linkalsito2.com.

Sarebbe possibile fare una roba del genere?
Il tempo di esecuzione della query sarebbe proporzionale alla grandezza del database? Se no, perchè?
E riguardo al carico sul server?
Quale sarebbe la sintassi esatta? Oserei dire: (ref http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_replace)

SELECT REPLACE db_tables ('linkalsito1.com', '1', '2')

Ma come al solito potrei sbagliarmi :P

emanuele

Citazione di: Flavio93Zena il Martedì - 30 Giugno 2015 - 21:43
Sarebbe possibile fare una roba del genere?
Potrei essere smentito, ma mi sentirei di dire che no, non è possibile farlo in un sol colpo.
Perché? Vedi dopo.

Citazione di: Flavio93Zena il Martedì - 30 Giugno 2015 - 21:43
Il tempo di esecuzione della query sarebbe proporzionale alla grandezza del database? Se no, perchè?
Ragionevolmente lo sarebbe, dato che dovrà comunque fare una scansione di tutto il database.
Non vedo perché non dovrebbe esserlo.

Citazione di: Flavio93Zena il Martedì - 30 Giugno 2015 - 21:43
E riguardo al carico sul server?
Se fosse possibile, l'unico motivo per cui ti dovresti preoccupare di ciò è se la query va in timeout, ma il se lo va o meno dipende dal numero di record.

Citazione di: Flavio93Zena il Martedì - 30 Giugno 2015 - 21:43
Quale sarebbe la sintassi esatta? Oserei dire: (ref http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_replace)

SELECT REPLACE db_tables ('linkalsito1.com', '1', '2')

Siccome il REPLACE lo dovrai fare in un UPDATE, la query sarà qualcosa di simile a:
UPDATE table_name
SET field_name = REPLACE(field_name, 'www.dominio1.tld', 'www.dominio2.tld')

Ora, tornando alla prima domanda, come puoi vedere la query è specifica sia per tabella che per campo, quindi (per quanto io ne sappia, ma potrei sbagliarmi), l'unico modo di fare qualcosa di simili è di eseguire la query per ogni campo di ogni tabella.
Una sola query, per quanto ne sappia, è impossibile.
Potrebbe, forse, essere possibile tramite un prepared statement (o magari qualche sub-select), ma non ci metterei la mano sul fuoco, e comunque probabilmente sarebbe forse più facile scrivere un uno script php che non la query necessaria.

Flavio93Zena

* Flavio93Zena vuole un like button

Bella! Grazie! Curiosità soddisfatta ;D

Discussioni simili (3)