Domanda

Saluti,

Ho dei dati memorizzati su mysql con delimitatore ", " in 1 tabella. Ho anche file e colonne archiviate nel database. Ora devo generare i dati usando le righe e il numero di colonna memorizzati nel database per disegnare la tabella.

Le righe e il numero di colonna sono input dell'utente, quindi possono variare.

Diciamo che c'è il numero 3 nella colonna e 3 nelle righe.

Devo farlo come display like,

|___d1__|___d2__|___d3__|
|___d4__|___d5__|___d6__|
|___d7__|___d8__|___d9__|

Dove d1-d9 sarebbero i dati memorizzati nel database mysql con delimitatore ", " in una tabella.

Grazie per avermi aiutato.

È stato utile?

Soluzione

È possibile trasformare i valori separati da virgola dalla colonna di dati in un array utilizzando la funzione explode ():

<?php
  $result = mysql_query('SELECT rows, columns, data from table_name where id=1');
  $record = mysql_fetch_assoc($result);

  $rows = $record['rows'];
  $columns = $record['columns'];

  $data = explode(',' , $record['data']);

  if (sizeof($data) != $rows * $columns) die('invalid data');
?>

Per visualizzare la tabella, sono necessari due cicli for nidificati:

<table>
<?php for ($row = 0; $row < $rows; $row++) : ?>
    <tr>
    <?php for ($column = 0; $column < $columns; $column++) : ?>
        <td>
            <?php echo $data[$row * $columns + $column]; ?>
        </td>
    <?php endfor ?>
    </tr>
<?php endfor ?>
</table>

Altri suggerimenti

Questo non ti aiuterà a risolvere questo problema, ma una parola di buon consiglio: non scrivere MAI MAI valori separati da virgola in un campo di database. Non è possibile eseguire una query ragionevole delle informazioni archiviate in questo modo e il codice dell'applicazione sarà ingombro di brutte conversioni. Utilizzare invece una tabella separata con un riferimento alla tabella principale e una riga per valore.

supponendo che l'utente abbia impostato le dimensioni della tabella per 2 righe e 3 colonne e abbia effettuato un input per 6 celle, i dati che andranno al database saranno

  

2,3, D1, D2, D3, D4, D5, D6

quando recupererai i dati dalla cella e farai esplodere su una stringa recuperata otterrai 1 array di dimensioni con 8 elementi

$ r = $ e [0] righe

$ c = $ e [1] cols

$ e [2-7] dati

  • wrtite openning < tabella > tag
  • due loop, uno nell'altro,
  • il primo genererà il codice per l'inizio della riga
  • wrtite openning < tr > tag
  • all'interno di uno genererà il codice per la riga.
  • scrivi apertura < td > tag
  • scrivi dati $ e [1 + posizione calcolata da loop interni ed esterni]
  • Scrivi chiusura < td > tag
  • fine del ciclo interno
  • chiusura di wrtite < tr > tag
  • fine del ciclo esterno
  • chiusura di wrtite < tabella > tag

Dovrebbe darti l'idea

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top