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

Query sql per tabella database

Supporto per phpBB 3.0.x.
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: Query sql per tabella database

Messaggio da arnold layne » 22/03/2015, 16:18

nulla esce una pagina bianca con il testo della query

Codice: Seleziona tutto

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'if (!@mysql_connect

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: Query sql per tabella database

Messaggio da Micogian » 22/03/2015, 17:46

Essendo un file php deve essere racchiuso tra i tags <?php e ?>, li avevi messi?
Sono quelle cose che dai per scontato ma se non sei abituato a usare file php non puoi sapere.

I valori "host, user, password e dbname" sono gli stessi che trovi nel file config.php se la tabella è nel DB del forum.
Ovviamente non posso provare lo script ma a me sembra corretto. Se mancavano i tags PHP è ovvio che non funziona.

Codice: Seleziona tutto

<?php
if (!@mysql_connect("host","user","password")) exit('<p>Impossibile connettersi al server del database in questo momento.</p>');
if (!@mysql_select_db("DBname")) exit('<p>Impossibile connettersi al database in questo momento.</p>');

$sql = @mysql_query("select post_id, user_id
    FROM prefix_nometabella
    ORDER by post_id, user_id");
    $post_cor = '' ;
    $user_cor = '' ;
    while ($row = mysql_fetch_array($sql)) 
    {
        if($row['post_id'] == $post_cor && $row['user_id'] == $user_cor)
        {
        echo $row['post_id'] . " - " $row['user_id'] . "<br />";
        }
        $post_cor = $row['post_id'];
        $user_cor = $row['user_id'];
    } 
?>
A suo tempo avevo fatto una Guida su come si interroga un database che trovi su WIKI
http://wiki.phpbbitalia.net/Interrogare_il_database

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: Query sql per tabella database

Messaggio da arnold layne » 22/03/2015, 17:55

infatti mancavano, per quello avevo chiesto di mettere il codice completo

comunque fa questa lista

Codice: Seleziona tutto

43 - 18167
81 - 1546
81 - 2532
81 - 6042
95 - 14620
95 - 14620
95 - 14620
95 - 15441
95 - 15441
95 - 15441
181 - 4871
181 - 4871
181 - 4871
181 - 5459
181 - 5459
181 - 5459
181 - 7268
181 - 7268
181 - 7268

....
ma non toglie le righe doppie


il problema nasce perchè con la 4.3.10 di phpmyadmin

Codice: Seleziona tutto

Current selection does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available.
se trova righe doppie non si puo modificare le tabelle

Immagine

Immagine

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: Query sql per tabella database

Messaggio da Micogian » 22/03/2015, 18:14

Infatti quella è una query che visualizza le righe doppie, non le toglie, ma se hai la lista puoi sempre cancellare il record doppio con phpmyadmin.
Dipende da quanti sono.
Nella query si potrebbe sostituire il comando echo che visualizza il record doppio con una query di eliminazione del record stesso ma è un pò pericoloso.

La tabella è impostata male, manca un campo univoco che potrebbe essere un semplice "id" contatore.
Se non hai un id univoco in phpmyadmin non puoi modificare i records.
Fai una copia della tabella e prova ad aggiungere nella struttura un campo "id_tanks" o "tanks_id" all'inizio come "contatore".
Il campo prende un numero progressivo e a questo punto puoi modificare o eliminare il record.
Mi sembra strano che chi ha creato la tabella non abbia inserito un contatore.

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: Query sql per tabella database

Messaggio da arnold layne » 22/03/2015, 18:21

Micogian ha scritto:Infatti quella è una query che visualizza le righe doppie, non le toglie, ma se hai la lista puoi sempre cancellare il record doppio con phpmyadmin.
grazie, ma la mia domanda era
quale comando dovrei mettere per trovarle in modo da eliminare i doppioni?
sono 34.800 voci

cercavo un comando simile

Codice: Seleziona tutto

DELETE FROM ``.`avphpbb_thanks` WHERE `avphpbb_thanks`.`post_id` = 10 AND `avphpbb_thanks`.`user_id` = 5459 AND `avphpbb_thanks`.`thanks_from` = 0 AND `avphpbb_thanks`.`thanks_to` = 0 AND `avphpbb_thanks`.`poster_id` = 0 LIMIT 1
La tabella è impostata male, manca un campo univoco che potrebbe essere un semplice "id" contatore.
Se non hai un id univoco in phpmyadmin non puoi modificare i records.
Fai una copia della tabella e prova ad aggiungere nella struttura un campo "id_tanks" o "tanks_id" all'inizio come "contatore".
Il campo prende un numero progressivo e a questo punto puoi modificare o eliminare il record.
Con una versione precedente di PHPMyAdmin si puo modificare, con la versione nuova che ho su una VPS non piu, a parità di tabella

avevo gia provato con un campo nuovo, ma da errore

#1062 - Duplicate entry '0' for key 'PRIMARY'
Ultima modifica di arnold layne il 22/03/2015, 18:26, modificato 1 volta in totale.

Avatar utente
brunino
Moderatore
Moderatore
Messaggi: 2819
Iscritto il: 12/01/2013, 16:35
Sesso: Maschio
Versione: 3.1.2
Server: UNIX/Linux
PHP: php 5.3
Database: mysql
Località: Toscana, Firenze
Contatta:

Re: R: Query sql per tabella database

Messaggio da brunino » 22/03/2015, 18:25

Dalla nuova versione phpmyadmin non puoi cancellare/modificare le righe se non c'e un campo univoco in quella tabella.

Inviato dal mio GT-S5360 con Tapatalk 2
E' sempre gradito un grazie

Creo estensioni per phpBB 3.1 su misura: contattami via MP.
Mie Estensioni: Top Ten Topics | Ban List | Topic List
Visita il mio forum di test e sviluppo stili e estensioni phpBB 3.1

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: R: Query sql per tabella database

Messaggio da arnold layne » 22/03/2015, 18:31

brunino ha scritto:Dalla nuova versione phpmyadmin non puoi cancellare/modificare le righe se non c'e un campo univoco in quella tabella.

Inviato dal mio GT-S5360 con Tapatalk 2
Risolto facendo riga nuova all'inizio con flaggato AI (AutoIncrement)

ora vediamo se riusciamo a togliere le righe doppie di quella tabella

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: Query sql per tabella database

Messaggio da Micogian » 22/03/2015, 18:35

La domanda è posta male
quale comando dovrei mettere per trovarle in modo da eliminare i doppioni?
La mia risposta riguarda la prima parte, come trovarle, l'eliminazione è un'altra procedura.
Sarebbe più semplice se la tabella contenesse un "id" univoco ma poi bisogna vedere come viene gestita la tabella e se un nuovo campo crea problemi alla Mod.
L'esempio che hai messo non va bene perchè cancellerebbe non solo i doppioni ma tutti i records che hanno quei dati:

Codice: Seleziona tutto

DELETE FROM ``.`avphpbb_thanks` WHERE `avphpbb_thanks`.`post_id` = 10 AND `avphpbb_thanks`.`user_id` = 5459
Infatti cancelleresti tutti i records che hanno post_id=10 e user_id=5459, tutti, non solo i doppi.
Se ci fosse un "thanks_id" univoco basterebbe

Codice: Seleziona tutto

DELETE FROM ``.`avphpbb_thanks` WHERE `avphpbb_thanks`.`thanks_id` = XXX
dove XXX è il thanks_id del record trovato doppio.

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: Query sql per tabella database

Messaggio da arnold layne » 22/03/2015, 18:37

allora cè da fare uno script nuovo che contiene id_tanks

Immagine

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: Query sql per tabella database

Messaggio da Micogian » 22/03/2015, 19:26

Si può fare così:

Codice: Seleziona tutto

    <?php
    if (!@mysql_connect("host","user","password")) exit('<p>Impossibile connettersi al server del database in questo momento.</p>');
    if (!@mysql_select_db("DBname")) exit('<p>Impossibile connettersi al database in questo momento.</p>');

    $sql = @mysql_query("select post_id, user_id, id_tanks
        FROM avphpbb_thanks
        ORDER by post_id, user_id");
        $post_cor = '' ;
        $user_cor = '' ;
        $i= 0;
        while ($row = mysql_fetch_array($sql)) 
        {
            $id_tanks[$i]   = $row['id_tanks'] ;
            $post_id[$i]   = $row['post_id'] ; 
            $user_id[$i]   = $row['user_id'] ; 
            if( $post_id[$i] == $post_cor &&  $user_id[$i] == $user_cor)
            {
            $sql1 = "DELETE FROM avphpbb_thanks WHERE id_tanks = " .  $id_tanks[$i];	
			if(@mysql_query($sql1))
                        {
			echo "record " . $id_tanks . " eliminato.<br />";
			}
            }
            $post_cor = $post_id[$i]
            $user_cor =  $user_id[$i]
            ++$i
        } 
    ?>

Dovrebbe funzionare, se il record corrente è uguale a quello precedente viene eliminato.
Ti consiglio però di fare prima una copia della tabella, non si sa mai.

Rispondi

Torna a “[3.0.x] Forum di Supporto”

Chi c’è in linea

Visitano il forum: Nessuno e 93 ospiti