Domanda

Sono attualmente in fase di sviluppo il mio sistema di blogging. Attualmente quando si crea un nuovo post, si ottiene la possibilità di archiviare esso categorie di vostra scelta.

Al momento sto memorizzare le categorie come un valore VARCHAR in un database mysql. A titolo di esempio, il campo conterrà 2,4,8 se l'utente ha scelto le categorie con ID:. 2, 4 e 8

Per recuperare i post del blog per la categoria con ID 4 allora io uso:

SELECT col FROM table WHERE LOCATE(',4,', CONCAT(',',col,','))

mi è stato detto che i valori separati da una virgola decimale è un no-go (molto male) quando si tratta di una buona struttura del database!

Qualcuno può fornire me con un buon modo / tecnica per rendere questo il modo più efficace?

Grazie in anticipo

È stato utile?

Soluzione

Una configurazione flessibile e robusta, come pubblicato tante volte in SO:

POSTS
id
name
text

CATEGORIES
id 
name

POST_CATEGORIES
post_id
category_id

Se la query corrente sarebbe:

SELECT p.id, p.name, p.text
FROM posts p
JOIN post_categories pc
ON pc.post_id = p.id
AND pc.category_id = 4;

Altri suggerimenti

Se vuoi nella normalizzazione dei database relazionali. Per il vostro caso specifico considerare la creazione di 2 tavoli aggiuntivi, Categorie e BlogCategories in aggiunta al vostro tavolo contenuto del blog. Categorie contengono la definizione di tutti i Tag / Categorie e nient'altro. La tabella BlogCategories è una tabella di riferimento incrociato molti-a-molti che, probabilmente, nel tuo caso solo contiene il riferimento chiave esterna alla tabella Blog e il riferimento chiave esterna alla tabella Categorie. Questo permette l'ingresso 1 blog per essere associato a più categorie e 1 Categoria per essere associate a più voci sul blog.

Come l'out dei dati non sarà più difficile che una tabella 3 si uniscono nel peggiore dei casi e sarete fuori del business stringa di capire la nostra la logica di business.

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