phpBB Italia chiude!
phpBB Italia ringrazia tutti gli utenti che hanno dato fiducia al nostro progetto per ben 9 anni, e che, grazie al grande lavoro fatto da tutto lo Staff (rigorosamente a titolo gratuito), hanno portato il portale a diventare il principale punto di riferimento italiano alla piattaforma phpBB.

Purtroppo, causa motivi personali, non ho più modo di gestirlo e portarlo avanti. Il forum viene ora posto in uno stato di sola lettura, nonché un archivio storico per permettere a chiunque di fruire di tutte le discussioni trattate.

Il nuovo portale di assistenza per l'Italia di phpBB diventa phpBB-Store.it, cui ringrazio per aver deciso di portare avanti questo grande progetto.

Grazie ancora,
Carlo - Amministratore di phpBB Italia

Richiesta Query MySql

Area di discussione relativa al linguaggio di programmazione web più conosciuto. Il forum è dedicato anche a MySQL, la piattaforma di database più utilizzata con il PHP.
Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3704
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: Richiesta Query MySql

Messaggio da Micogian » 08/10/2012, 18:29

Quanti sono i records da modificare ?

Se non hai un backup completo della tabella una strada è creare una copia del file di backup e ci metti delel righe come questa:

Codice: Seleziona tutto

UPDATE `avphpbb_topics` SET `topic_desc` = '' WHERE `topic_id` = '';
con il mouse selezioni la stringa e il topic_id dalla lista INSERT e lo inserisci tra gli apici della riga in modo di ottenere righe come questa

Codice: Seleziona tutto

UPDATE `avphpbb_topics` SET `topic_desc` = 'DivX, 1CD, MP3 iTA, AVi, Drammatico/Storico' WHERE `topic_id` = '6843';
UPDATE `avphpbb_topics` SET `topic_desc` = 'DVD, MuxU, XviD, MP3 ITA, Avi 3 DVD' WHERE `topic_id` = '10';
.... ecc.
Un'altra strada è quella di creare una tabella temporanea con i dati che hai e poi con una pagina php ricavare i dati e fare l'UPDATE, ma quella è una strada più complessa,

Avatar utente
arnold layne
Utente
Utente
Messaggi: 147
Iscritto il: 23/07/2012, 9:04
Sesso: Maschio
Versione: 3.0.13-PL1
Server: UNIX/Linux
PHP: 5.3.29
Database: MySQL 5.5.42
Contatta:

Re: Richiesta Query MySql

Messaggio da arnold layne » 08/10/2012, 18:40

A mano è lunghissimo

23.882 topic

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3704
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: Richiesta Query MySql

Messaggio da Micogian » 08/10/2012, 18:53

Allora ti conviene creare una tabella temporanea, da phpmyadmin copia la tabella avphpbb_topics in avphpbb_topics_tmp (solo struttura).
Poi fai l'INSERT del file che hai. Devi modificare il nome della tabella

Codice: Seleziona tutto

INSERT INTO `avphpbb_topics_tmp` (`topic_id`, `topic_desc`) VALUES
........................
Dovresti ottenere una tabella che contiene topic_id e topic_desc.
Se tutto va bene poi vediamo come fare il resto.


EDIT:
se hai creato la tabella avphpbb_topics_tmp puoi estrarre i dati e fare automaticamente l'UPDATE con un file che chiamerai mod_topic_desc.php, da mettere nella root del forum, questo il contenuto

Codice: Seleziona tutto

<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);

$user->setup();

$primo = $_GET['a'];
$ultimo = $_GET['b'];
if ($primo == ''){$primo = '0';}
if ($ultimo == ''){$ultimo = '100';}
$sql = @mysql_query("SELECT * from avphpbb_topics_tmp LIMIT $primo,$ultimo" );
if (!$sql) exit('<p>errore query 001: ' . mysql_error() . '</p>');
while ($row = mysql_fetch_array($sql)) 
{
$id_cor = $row['topic_id'];
$title_cor = str_replace("'", "''",$row['topic_title']);
$sql1 = "UPDATE " . TOPICS_TABLE . " SET topic_desc = '" . $title_cor . "' WHERE topic_id =" . $id_cor ; 
    if (mysql_query($sql1))  {
    echo "<p>Il record <b>" . $id . "</b> è stato aggiornato</p>" ;
    } else {
    echo "errore : " . $sql1 . "<br />" ;
    }
}
?>
Nel lanciare il programma puoi indicare i valori a e b che sono il primo record e il numero dei record da elaborare, questo per evitare di lanciare un ciclo troppo grosso.

In pratica devi inserire l'url mod_topic_desc.php?a=0&b=100
Significa che le operazioni di UPDATE cominceranno dal record '0' (il primo) e comprenderà 100 records.
Se funziona fai i rimanenti scegliendo il primo record e il numero dei record. Si parte con 100, poi si prova con 1000 e se la query non è troppo lunga si può aumentare il numero dei records da elaborare.
In sostanza, la query SELECT estrae il topic_id e il topic_desc dalla tabella avphpbb_topics_tmp e per ogni record viene eseguito l'UPDATE nella tabella avphpbb_topics.
La parte di codice $title_cor = str_replace("'", "''",$row['topic_title']); serve a sostituire gli apici che eventualmente sono presenti nella stringa, cosa che darebbe un errore nella query UPDATE.

Rispondi

Torna a “PHP - MySQL”

Chi c’è in linea

Visitano il forum: Nessuno e 37 ospiti