Visualizzazione risultati 1 fino 2 di 2

Discussione: Passare una tabella del database ad una variabile

  1. #1
    Guest

    Question Passare una tabella del database ad una variabile

    Quello che vorrei fare è prendere una tabella dal mio database e per ogni colonna creare una variabile

    $nomedellacolonna='valore1%valore2%valore3%...%val oren'

    -% serve solo come carattere per separare i valori, va bene qualsiasi altro carattere
    -Devo ottenere variabili per TUTTE le colonne e vorrei che l'intero processo sia il più efficente in termini soprattutto di numero di richieste fatte al database

    Come posso fare? grazie per l'attenzione

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    -% serve solo come carattere per separare i valori, va bene qualsiasi altro carattere
    Se nella base di dati c'è almeno una colonna di tipo CHAR, VARCHAR o altri tipi testuali, questa strategia non ha garanzia di funzionare correttamente: qualunque sia il carattere che usi come separatore, esso potrebbe essere presente del testo di un campo.

    Ciò detto, puoi interrogare la base di dati richiedendo tutti i campi di tutte le righe, creare un vettore che contenga un vettore per ciascuna riga (ogni vettore contiene le colonne), e "trasporre" la matrice così ottenuta. In pseudocodice:
    Codice PHP:
    // Genera un vettore che contiene i valori della colonna $field
    function project($table, $field) {
    $column = [];
    foreach (
    $table as $row) {
    $column[] = $row[$field];
    }
    return
    $column;
    }

    // Recupera la tabella dalla base di dati
    $query = "SELECT * FROM my_table";
    $result = mysqli->query($query);

    // Copia la tabella in un vettore
    $table = array();
    while (
    $row = $result->fetch_assoc()) {
    $table[] = $row;
    }

    // Se la tabella era vuota, non servono altre operazioni
    if (empty($table)) {
    // ... gestione della situazione (eccezione? Return?)
    }

    // Per ogni colonna, costruisce il vettore che contiene tutti gli elementi di quella colonna nella tabella (proiezione)
    $fields = array_keys(current($table));
    $transposed = array();
    foreach (
    $fields as $field) {
    $transposed[$field] = project($table, $field);
    }

    // Per ogni colonna, "fonde" i valori in un'unica stringa, separandoli con '%'
    $values = array();
    foreach (
    $transposed as $field => $column) {
    $values[$field] = implode('%', $column)
    }

    // $values['nome_della_colonna'] contiene il valore richiesto
    Non è testato e può contenere errori di sintassi. Il costo è di un'interrogazione alla base di dati, O(n) per copiare i dati in $table, O(m * n) per la "trasposizione" e O(m * costo-di-una-implode) < O(m * n) per schierare i valori in una stringa (n numero di righe, m di colonne). Il costo in termini di spazio è pari alla dimensione della tabella, più un sovrapprezzo trascurabile per le variabili coinvolte.

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •