Newsgroup: it.comp.www.php
Titolo: data shaping

Ciao a tutti,
premetto che sono piuttosto scarso in php .
Avrei bisogno di una piccola dritta. Di seguito trovate un loop che estrae
dati da un db.
La variabile $nome cambia soltanto ogni 5-6 o 7 records, e avrei bisogno di
fare un print
di una stringa specifica ogni volta che cambia il nome (banalmente: chiudere
un <div> e aprirne un altro)
Praticamente una sorta di data shaping.
Grazie per qualunque consiglio!
while($row = mysql_fetch_array($result))
   {
    $nome = $row['nome'];
    $item_id = $row['item_id'];
    $item_link = $row['item_link'];
    $item_title = $row['item_title'];
    $item_content = $row['item_content'];
    print "<h2>$source</h2>\n";
    print "<h3><a href=\"$item_link\">$item_title</a></h3>\n";
    print "<p>$item_content</p>\n";
    print "<p class=\"posted\">\n";
    }
-- lonemon

     }
Ciao Lone

 -- lonemon
 
credo che tu debba riprogettare il tuo db.. sarò breve e più chiaro
possibile ma non ho molto tempo
crea due tabelle 
nella tabella 'item' creerai queste colonne
id INT auto_increment, id_nome INT, link VARCHAR(255), title VARCHAR(255),
content VARCHAR(255)
ed in 'item_name' creerai
id_nome INT auto_increment, nome VARCHAR(255)
poi quando inserirai nuovi nomi farai in modo che il valore corrispondente
in id_nome nella tabella 'item_name' sia lo stesso che inserirai in id_nome
nella tabella 'item' es.
|---->item<-----------------------------|
| id | id_nome | link | title | content |
|---------------------------------------|
|  0 |       1 | xxxx | xxxxx | xxxxxxx |
|  0 |       1 | xxxx | xxxxx | xxxxxxx |
|  0 |       2 | xxxx | xxxxx | xxxxxxx |
|  0 |       2 | xxxx | xxxxx | xxxxxxx |
|  0 |       2 | xxxx | xxxxx | xxxxxxx |
|---------------------------------------|
|---->item_name<----|
| id_nome |  nome   |
|------- -----------|
|       1 | primo   |

 -- lonemon
 
credo che tu debba riprogettare il tuo db.. sarò breve e più chiaro
possibile ma non ho molto tempo
<- vai diretto a fine pagina se ti perdi nelle spiegazioni ->
crea due tabelle 
nella tabella 'item' creerai queste colonne
id INT auto_increment, id_nome INT, link VARCHAR(255), title VARCHAR(255),
content VARCHAR(255)
ed in 'item_name' creerai
id_nome INT auto_increment, nome VARCHAR(255)
poi quando inserirai nuovi nomi farai in modo che il valore corrispondente
in id_nome nella tabella 'item_name' sia lo stesso che inserirai in id_nome
nella tabella 'item'.
quindi avrai un codice simile a questo x un nuovo inserimento->
mysql_query("INSERT INTO item_name (nome) values ('$nome')";
$id_nome = mysql_query("SELECT id_nome FROM item_name WHERE nome =
'$nome'");
$id_nome = mysql_result($id_nome, 0, 0);
mysql_query("INSERT INTO item (id_nome, link, title, content) values
($id_nome, '$link', '$title', '$content')");
|---->item<-----------------------------|
| id | id_nome | link | title | content |
|---------------------------------------|
|  0 |       1 | xxxx | xxxxx | xxxxxxx |
|  1 |       1 | xxxx | xxxxx | xxxxxxx |
|  2 |       2 | xxxx | xxxxx | xxxxxxx |
|  3 |       2 | xxxx | xxxxx | xxxxxxx |
|  4 |       2 | xxxx | xxxxx | xxxxxxx |
|---------------------------------------|
|---->item_name<----|
| id_nome |  nome   |
|------- -----------|
|       1 |   primo |
|       2 | secondo |
|       3 |   terzo |
|-------------------|
quando invece dovrai ricavare dati dal db la tua query sarà del tipo->
SELECT nome,link,title,content,id FROM item,item_name WHERE id=$id_richiesto
AND item.id_nome = item_name.id_nome;
e riceverai una riga contenente tutte le info richieste su $id_richiesto
mentre invece se farai una query del genere->
SELECT nome FROM item_name;
riceverai una colonna contenente tutti i nomi esistenti;
--------
x lo 'shaping' come dici tutto diverrebbe->
SELECT nome,link,title,content,id FROM item,item_name WHERE item.id_nome =
item_name.id_nome group by nome;
che restituisce una tabella con un 'esemplare' di ogni riga x ogni nome
esistente
--------
io te l'ho spiegato così xkè il db diverrà più compatto e quindi più veloce
ma mi sa che capirai poco nelle mie scritture
--------
ma se vuoi mantenere la struttura che hai adesso puoi lo stesso avere quello
che vuoi senza quello strano loop.. ti basta fare->
SELECT * FROM tabella group by nome;
e stampi tutto quello che ti restituisce!
--------
spero d nn aver fatto errori
fammi sapere come è andata 
risp in newsgroup
byez all :-)

 restituisce!
Grazie infinite, siete stati entrambi gentilissimi.
Vedrò di fare qualche prova, anche se certamente un conto è fare un innocuo
hacking di cose open source, un conto è riprogettare da capo!
-- lonemon