Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    update multiplo di un campo prendendo un pezzo di un'altro campo

    Gentile Team
    ho una tabella con 2 campi:

    uno si chiama "cv" e al suo contenuto ha valori di questo tipo:

    11Oct18_173729retro.pdf

    del quale mi interessano i primi 6 campi


    e l'altro campo è data_reg
    nel quale per ogni record devo inserire i primi 3 campi di "cv"
    nel formato 11-10-18

    secondo voi è fattibile questa operazione massiva su 2000 campi tutti con cv che ha date diverse per ogni record?

    grazie mille
    L'intuizione creativa più di ogni altra cosa è l'unico elemento per cui la vita vale la pena di essere vissuta (D.W)

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    E' un'operazione che faresti una volta per aggiornare il db, oppure un'operazione ripetuta anche più volte e con alta frequenza?
    Perché se la fai una volta o ogni tanto, per il sistema è una passeggiata, se la attivi una volta al secondo potrebbe cominciare ad avere un qualche impatto sulle prestazioni.

  3. #3
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    E' un'operazione che faresti una volta per aggiornare il db, oppure un'operazione ripetuta anche più volte e con alta frequenza?
    Perché se la fai una volta o ogni tanto, per il sistema è una passeggiata, se la attivi una volta al secondo potrebbe cominciare ad avere un qualche impatto sulle prestazioni.

    è un' operazione che farei solo una volta per bonificare un database

    ps intanto sono riuscito a popolare il campo così

    UPDATE iscrizioni2 SET data_reg= left(cv, 14) WHERE `id`=`id`;

    ora mi occorrerebbe sapere solo come convertire questo formato
    11Oct12_173729
    in quello standard
    11-10-2012 17:37:29
    ovviamente per tutti i record


    grazie millle
    L'intuizione creativa più di ogni altra cosa è l'unico elemento per cui la vita vale la pena di essere vissuta (D.W)

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Prima cosa: il formato standard è aaaa-mm-gg hh:mm:ss, ovvero il formato datetime, che ti assicura anche l'ordine cronologico usando l'ordinamento alfabetico.

    Se vuoi fare tutto in SQL non lo so se sia possibile, ma in tal caso ti sposto nella sezione Database dove andrebbe la discussione.
    Se invece va bene metterci di mezzo PHP, tanto lo fai una volta e basta:
    Ultima modifica di Alhazred; 06-09-2018 a 11:52

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Ecco il codice:
    Codice PHP:
    // per esempio usando PDO

    $result $db->query("SELECT id, cv FROM iscrizioni2");

    while ( 
    $res $result->fetch(PDO::FETCH_ASSOC) )
    {
        
    $cv explode('_'$res['cv']);

        
    $data_ora DateTime::CreateFromFormat(
                        
    'dMy_His',
                        
    $res['cv'] . " " str_replace("retro.pdf"""$cv[1])
                    )
                    ->
    format('Y-m-d H:i:s');

        
    $db->query("UPDATE iscrizioni2 SET reg_date='" $data_ora "' WHERE id=" $res['id']);


  6. #6
    userò php
    ma ho un problema...la parola retro.pdf cambia per tutti
    dovremmo trovare un modo per prendere solo i primi 14 caratteri fregandocene del resto...
    credi sia possibile?
    L'intuizione creativa più di ogni altra cosa è l'unico elemento per cui la vita vale la pena di essere vissuta (D.W)

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Cambia
    $cv = explode('_', $res['cv']);

    con
    $cv = explode( '_', substr($res['cv'], 0, 14) );

    e
    str_replace("retro.pdf", "", $cv[1])

    con
    $cv[1]

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Tra cancellazioni e riscritture del codice mi si è impicciato tutto.

    Togli
    $cv = explode('_', $res['cv']);

    e cambia
    $res['cv'] . " " . str_replace("retro.pdf", "", $cv[1])

    con
    substr($res['cv'], 0, 14)

    Non serve fare l'explode.

    Alla fine in pratica dovresti avere
    Codice PHP:
    $result $db->query("SELECT id, cv FROM iscrizioni2");

    while ( 
    $res $result->fetch(PDO::FETCH_ASSOC) )
    {
        
    $data_ora DateTime::CreateFromFormat(
                        
    'dMy_His',
                        
    substr$res['cv'], 014 )
                    )
                    ->
    format('Y-m-d H:i:s');

        
    $db->query("UPDATE iscrizioni2 SET reg_date='" $data_ora "' WHERE id=" $res['id']);


  9. #9
    non so perchè ma il tuo non funge... forse problemi di versione php

    in ogni caso ho fatto questo che funziona ma lo fa solo per il primo record
    Codice PHP:
    <?phpinclude("db.php");$query=mysql_query("SELECT * FROM iscrizioni2");while($row=mysql_fetch_array($query)){ $cv2 substr($row['cv'], 014);$data_ora DateTime::CreateFromFormat('dMy_His',$cv2)->format('Y-m-d H:i:s');$id2 $row['id'];$query=mysql_query("UPDATE iscrizioni2 SET datareg='" $data_ora "' WHERE id=" $id2);}  ?>

    suggerimenti?
    L'intuizione creativa più di ogni altra cosa è l'unico elemento per cui la vita vale la pena di essere vissuta (D.W)

  10. #10
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Io il mio codice non l'ho provato, quindi è passibile di errori, te ne appare qualcuno?
    Io ho usato PDO, nel mio codice manca la parte della connessione al db, devi mettercela tu, non li so i tuoi dati.
    Vedo che tu usi mysql_ che dovresti evitare come la peste, è un driver che è stato abbandonato, almeno usa mysqli_ con la i finale

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.