Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [MySQL] Categorie multiple, explode nella query

    Ciao a tutti!
    Volevo sapere se in una query mysql si può fare una cosa del genere:

    Ho due tabelle, una chiamata "articoli" e l'altra "categorie".
    La tabella categorie ha due campi, Id (numerico) e Nome (varchar).
    Nella tabella articoli ho un campo "categoria" dove viene inserito un valore numerico che richiama la categoria dalla tabella "categorie".

    Ora avrei la necessità di assegnare più categorie ad un singolo articolo e avevo pensato di inserire nella tabella "articoli" gli id della categoria separati da un "-", faccio un esempio:

    ARTICOLI
    ID | NOME | CATEGORIA
    1 prova 1-3

    CATEGORIE
    ID | NOME
    1 cat 1
    2 cat 2
    3 cat 3

    L'articolo prova dunque appartiene alla categoria "cat 1" e "cat 3"

    Normalmente faccio una query con una JOIN all'altra tabella dando un nome ai vari campi tramite AS:
    codice:
    select art.nome AS art_nome, art.cat AS art_cat, cat.nome AS cat_nome, cat.id AS cat_id FROM articoli AS art JOIN categorie AS cat ON art.cat = cat.id
    In questo modo stampando "cat_nome" ottengo il nome della categoria.

    Come potrei fare nel caso di categorie multiple (quindi separate da un "-") ?

  2. #2
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    secondo me sbagli struttura, o meglio la devi costruire al contrario.
    Se un'articolo può appartenere a più categorie hai una relazione 1:N, quindi farai così:

    ARTICOLI
    ID | NOME
    1 prova
    2 prova2

    CATEGORIE
    ID | NOME| Articolo
    1 cat1 1
    2 cat2 2
    3 cat3 1

  3. #3
    Uhm... non penso che nel mio caso questa sia la struttura migliore.

    Nello specifico sto realizzando un database di videogames, per ogni gioco ci devono essere i seguenti campi: Genere, Numero giocatori, Sviluppatore, Distributore, Sistema

    ognuna di questa voce ha una tabella a parte, ad esempio la tab "Numero giocatori" ha come voci 1->singleplayer, 2->da 1 a 2 giocatori, 3-> da 1 a 4giocatori e così via, così come le altre voci che ho elencato

  4. #4
    Utente di HTML.it L'avatar di Gunn
    Registrato dal
    Feb 2006
    Messaggi
    370
    ti serve una terza tabella per gestire le associazioni

    categorie
    id | nomecat

    articoli
    id | nomeart

    articoli_in_categorie
    idcat | idart
    -10 points to SCLERO high top class [definition of SCLERO HIGH TOP CLASS: 90 random kills]

  5. #5
    Scusa ma che bisogno c'è di un'ulteriore tabella?
    Le categorie sono diverse (6 per la precisione), a cosa mi servirebbe creare una nuova tabella con gli articoli associati alle categorie?
    Così come sto adesso riesco a fare tutte le query che voglio, soltanto mi chiedevo come potessi estrarre il nome di categorie multiple separate da un "-"...

  6. #6
    Utente di HTML.it L'avatar di Gunn
    Registrato dal
    Feb 2006
    Messaggi
    370
    Originariamente inviato da Pennywise83
    Così come sto adesso riesco a fare tutte le query che voglio, soltanto mi chiedevo come potessi estrarre il nome di categorie multiple separate da un "-"...
    una cosa fatta per bene, eh?

    Codice PHP:

    articoli
    ------------------------------------------------------------------------------------
      
    id_articolo nome_articolo                testo articolo
                1 
    Tutorial PHP e MYSQL         Prova prova prova prova prova

    categorie
    ------------------------------------------------------------------------------------
     
    id_categoria nome_categoria
                1 
    PHP
                2 
    Database e server
                3 
    Linguaggi Web in Generale

    associazioni
    ------------------------------------------------------------------------------------
     
    id_articolo id_categoria
               1 
    1
               1 
    2
               1 

    -10 points to SCLERO high top class [definition of SCLERO HIGH TOP CLASS: 90 random kills]

  7. #7
    Uhm... è interessante quello che mi proponi, solo che in questo modo il db diventerebbe un pò più complesso... ma forse più robusto, dovrò pensarci su...

    in ogni caso non è possibile fare ciò che chiedo?

  8. #8
    non è proprio possibile fare un explode del carattere "-" all'interno di una query?

  9. #9
    SELECT SUBSTRING_INDEX( '108-234', '-' , 1 )

    -> 108

    SELECT SUBSTRING_INDEX( '108-234', '-' , -1 )

    -> 234

  10. #10
    Uhm, poiché ho diverse categorie con cui faccio un JOIN e quindi ho una query del genere:
    select art.nome AS art_nome, art.cat AS art_cat, cat.nome AS cat_nome, cat.id AS cat_id FROM articoli AS art JOIN categorie AS cat ON art.cat = cat.id

    come posso prendere il valore art.cat (ad esempio 1-3-4) e dirgli "dividi art.cat togliendo il - in 1,3,4 e prendi rispettivamente la categoria 1,3,4" ?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.