Newsgroup: it.comp.www.php
Titolo: Classe gestione database

Sto cercando una classe per gestire dati generici.
In pratica devo gestirlo con l'indicizzazione a tag,
Esiste qualcosa di già fatto?
Ho cercato un po' ma non ho trovato nulla.
 

Franco Af ha usato la sua tastiera per scrivere :

Non si capisce, temo.
Bye
 
-- 
Alex
 
--- news://
freenews.netfront.net/
 - complaints: 
ne...@netfront.net
 ---


Sì, non si capisce..
Che devi fare?
 
Ciao!

Ok cerco di spiegarmi meglio...
In pratica ho una tabella dati formata in questo modo.
 
id - data - dati
 
Vorei poter associare dei tag per ogni record della tabella un qualcosa di 
simile a delicious per intenderci. (i dati potrebbero essere appunto le url)
 
Programmare la gestione dei tag dall'inizio è una cosa un po' lunga e vorrai 
un qualcosa di già pronto.
 
grazie 
 

 vorrai un qualcosa di già pronto.
 
Non mi è molto chiaro che indendi con il "programmare la gestione dei tag".
Se ti riferisci alla logica del livello applicazione non troverai una 
"classe" per farlo perchè è un compito troppo specifico della singola 
applicazione. Potresti piuttosto trovare una piccola webapp che fa già 
il lavoro che chiedi, ovvero conservare e taggare URL, e partire da 
quella.
IMHO.
 
-- 
Andrea
 

 due tabelle.
 
Nel caso specifico dei tag io nel tempo mi sono stabilizzato su una delle 
due soluzioni:
 
1:
 
create table oggetto (id int auto_increment, ...)
 
create table tag (tag varchar unique)
 
create table oggetto_tag (id_obj int FK, tag varchar FK)
 
2:
 
create table oggetto (id int auto_increment, ...)
 
create table oggetto_tag (id_obj int FK, tag varchar)
 
Senza "tabella base", ma normalizzando i tag (mb_strtolower, replace di 
spazi con - o _, ecc.)
 
 
Sempre più spesso uso la 2, visto che la 1 aggiunge solo overhead sul DB. 
La soluzione con "table tag (id, name)" non la uso perchè il tag è già 
primary key, non serve un id.
 
Bye.

 primary key, non serve un id.
 
Deformazione sqlite, anche io sono per la chiave minima e, in questo 
caso di colonna singola, per usare tutta la tupla come chiave.
 
-- 
Andrea
 

 
Prima cosa grazie a tutti per le risposte.
Premetto che so poco o nulla di database giusto le basi, e di conseguenza 
risolvere il problema in tempi brevi è quasi impossibile per me.
Io pensavo di procedere in questo modo:
creare le tabelle:
1) tabella tag (id,tag )  con indice id.
2) tabella dati(id,dati)  con indice id
3) tabella tag_dati(id_tag,id_dati)  con indice id_tag
Ma per la query di selezione sono in alto mare.
In pratica dovrei selezionare tutti i record della tabella dati con i tag 
selezionati.
I tag potrebbero essere più di uno e i record non dovrebbero ripetersi, di 
conseguenza come dovrei implementare la query?
La query è molto complessa?
 
 

 tag selezionati.
 
Qualcosa tipo (vado a braccio, magari qualcuno mi corregge se sbaglio)
 
select dati.*, group_concat(tag.tag separator ',') as tags from dati
left join tag_dati on (
dati.id
 = tag_dati.id_dati)
left join tag on (
tag.id
 = tag_dati.id_tag)
group by tag.tag
 
Siccome MySQL dà per scontato che la gente usi DB piccoli, il limite di 
caratteri per group_concat è di 1024, quindi devi ricordarti di 
lanciare, subito dopo la connessione a MySQL, una query che faccia
 
set group_concat_max_len 1000000
 
(che setta il limite a 1 milione di caratteri), o qualcosa di simile 
dipendentemente da quanti tag e quanto lunghi pensi di avere nei risultati.
 
Questo presuppone che i tuoi tag non abbiano la virgola nel nome, e puoi 
esplodere il campo "tags" nei risultati tramite, appunto, explode() in PHP.
 
Bye.