Newsgroup: it.comp.www.php
Titolo: Stampare elenco senza duplicati

Salve a tutti, ho questo problemino:
Ho una tabella "racconti" dove per ogni racconto c'è il nome
dell'autore che l'ha scritto.
Vorrei fare un elenco di tutti gli autori, ma poiché ci sono autori
che hanno scritto più di un racconto, vorrei visualizzare l'elenco di
tutti gli autori senza duplicati dei nomi.
La query seguente mi da tutti gli autori, ma con nomi che ricorrono
più volte.
Cosa devo inserire per eliminare i duplicati e far sì che un nome
venga stampato solo una volta?
-----------------------------------------------
// connessione già stabilita...
// elenco autori...
$sql = "SELECT autore FROM racconti ORDER BY autore ASC";
$res=mysql_query($sql);
while ($g=mysql_fetch_row($res)) {
    echo $g[0]<br>";
    }
-----------------------------------------------
Grazie
GK

 ha scritto

Ho risolto, basta aggiungere DISTINCT alla query che diventa:
$sql = "SELECT DISTINCT autore FROM racconti ORDER BY autore ASC";
Ciao!

 tutti gli autori senza duplicati dei nomi.
    Usa SELECT DISTINCT.
        Cris
--
Cristiano Verondini
http://noway.ing.unibo.it

Mai pensato di normalizzare un po' il tuo DB?

 tutti gli autori senza duplicati dei nomi.
Sbagli l' impostazione devi normalizzare il db cosi' ne guadagni in
prestazioni.
Crei 2 tabelle cosi':
Tabella autori                Tabella Libri
ID_Autore                        ID_Libro
Nome_Autore                    ID_Autore
                                          Titolo _Libro
Dovrebbe essere una cosa d questo tipo ma non sono poi espertissimo chiedi
agli altri.
Ciao

|Tabella autori                Tabella Libri
|ID_Autore                        ID_Libro
|Nome_Autore                    ID_Autore
|                                          Titolo _Libro
|Dovrebbe essere una cosa d questo tipo ma non sono poi espertissimo chiedi
|agli altri.
Siccome molto spesso capita che un libro sia scritto da piů autori (anche
romanzi: Fruttero e Lucentini), il DB va normalizzato almeno cosě:
autore
- id PK
- nome
- cognome eccetera
libro
- id PK
- titolo
- editore_id
- ISBN eccetera
autore_libro
- autore_id PK, FK
- libro_id PK, FK
editore
- id
- nome
- citta
- sito_web eccetera
Nota che l'ISBN č un'ottima chiave candidata, ma secondo me non č molto
pratica come chiave primaria.
Matteo

 prestazioni.
    Sulla chiarezza e la pulizia ottenuta normalizzando un DB sono
d'accordo. ANche sulla possibilità di non creare anomalie di modifica o
inserimento (uso delle forme normali).
    Però per quello che riguarda le prestazioni, è molto più comodo avere
una tabella con tutti i campi già decodificati che non andare avanti a botte
di join.
    Chi ha fatto del data mining con sistemi OLAP sa di cosa parlo ... :-))


|    Però per quello che riguarda le prestazioni, è molto più comodo avere
|una tabella con tutti i campi già decodificati che non andare avanti a
botte
|di join.
Non sono d'accordo nella maniera più assoluta.
Per quel che riguarda le prestazioni, un database normalizzato non è solo
meno ridondante, più coerente e più affidabile, ma anche più leggero e più
veloce!
Perlatro, alcune cose non si possono fare senza normalizzazione. Dimmi come
risolvi quando hai un libro con 2 autori, quando una casa editrice cambia
sito web o quando sul tuo tabellone uno scrive "W. B. Yates" un altro
"William B. YATES" e un altro ancora "Guglielmo B. Yeats".
OK, devi smazzarti un po' di più con l'SQL, ma allora se è per quello uno
può anche fare a meno di PHP e farsi tante paginette in HTML con FrontPage.
Per carità, poi dipende anche dall'entità del db, ma se vuoi gestire un
database di una certa importanza (anche se amatoriale) non puoi non
normalizzare. O meglio puoi benissimo, non sparo mica a nessuno, poi però
quando nascono i casini non venire a piangere qui (che tra l'altro per
inciso sarebbe un po' ottì ma non importa, siamo uomini o caporali?) o su
it.comp.www.database ;-).
M

 it.comp.www.database ;-).
    Non ho mai detto che non si deve normalizzare. Anzi.
    Volevo solo sottolineare che 'normalizzato' e 'più performante' non sono
l'uno conseguenza dell'altro.
    Ho anche aggiunto che la tecnica delle tabelle denormalizzate si applica
a particolari problemi, quali il datawarehousing ed i metacubi OLAP. E si
parla di database di terabyte con tabelle da centinaia di milioni di record.


 Matteo
Grazie per il consiglio, il mio Db perň non contiene libri, per cui
(forse sto bestemmiando) non avrei  proprio l'esigenza di
normalizzarlo, (tra l'altro non posso nemmeno usare l'ISBN).
Si tratta di un "tabellone" contenente 150 articoli di rivista, la cui
struttura č questa:
CREATE TABLE articoli (
  id smallint(5) unsigned NOT NULL auto_increment,
  titolo varchar(200) default NULL,
  testo text,
  sezione
set('Racconti','Poesie','Editoriali','Presentazioni','Lettere')
default NULL,
  numero
enum('01','02','03','04','05','06','07','08','09','10','11','12','13')
default NULL,
  autore varchar(100) default NULL,
  PRIMARY KEY (id),
  UNIQUE KEY id(id)
)
A me serviva, per fare una pagina con le schede biografiche degli
autori, di avere un elenco di tutti gli autori senza duplicati e per
averlo ho usato DISTINCT e funziona.
Se volete dare un'occhiata alla pagina in questione, l'indirizzo č
http://sf.vallecaudina.net/autori/index.php
Grazie a tutti voi
GK

|A me serviva, per fare una pagina con le schede biografiche degli
|autori, di avere un elenco di tutti gli autori senza duplicati e per
|averlo ho usato DISTINCT e funziona.
Ben, ma poi le biografie e gli altri dati (foto, vedo) dove stanno, in una
tabella Autori?

 ha scritto nel messaggio
news:9p1jsm$vi4$1...@newsfeed.cineca.it...

No, la tabella Autori sono indeciso se costruirla o meno...
Per ora le foto e le biografie stanno in normali pagine html (una per
autore) che vengono incluse nella pagina principale.
Se faccio questa tabella poi come posso associare al nome dell'autore
i titoli degli articoli che ha scritto?
Ci sono autori che hanno scritto circa 25 articoli, come dovrebbe
essere la struttura della tabella?
Cosě?
CREATE TABLE autori (
id smallint(5) unsigned NOT NULL auto_increment,
nome_e_cognome varchar(70) default NULL,
url_foto varchar(70) default NULL,
articoli_scritti text, // ci metto il titolo o gli ID degli articoli
scritti???
ecc ecc.
)
----
GK

|No, la tabella Autori sono indeciso se costruirla o meno...
|Per ora le foto e le biografie stanno in normali pagine html (una per
|autore) che vengono incluse nella pagina principale.
In effetti non essendo molti gli autori, ed essendo le pubblicazioni chiuse
(a proposito: bellina rivista e bellino sito), questo sistema potrebbe
andare benone.
|Se faccio questa tabella poi come posso associare al nome dell'autore
|i titoli degli articoli che ha scritto?
|Ci sono autori che hanno scritto circa 25 articoli, come dovrebbe
|essere la struttura della tabella?
IMHO, dovrebbe essere + o -:
- id
- nome
- cognome
- biografia
- foto
Per evitare di inserire un'immagine in un campo binario del DB, puoi anche
dare come nome alle foto l'ID dell'autore e poi le linki cosě:
echo "<img src=\"$id.jpg>\"
A questo punto dovresti anche modificare la tabella degli articoli e
inserire l'id dell'autore, invece del nome... La tabella articoli sarebbe
piů o meno:
- id
- autore_id
- titolo
- testo
Oppure in alternativa usi il campo nome_cognome come chiave primaria.
Boh.
Comunque una volta fatto cosě, nella pagina delle biografie puoi facilmente
recuperare tutti gli articoli che un autore ha inserito e visualizzare
l'elenco dei titoli linkati.
Ciao

 Oppure in alternativa usi il campo nome_cognome come chiave primaria.
Infatti, alla fine mi sa che è meglio creare una tabella Autori.
Grazie per i consigli.
--
GK