Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2002
    Messaggi
    378

    filtrare un campo che contiene più valori separati dalla virgola

    ho una tabella con un campo categoria multiplo dove i dati memorizzati sono nel seguente formato divisi dalla virgola:

    22,33,1213,1234,3344,2223,44,2

    ora quando devo filtrare il record, per esempio:

    categoria 22 oppure categoria 44

    e corretto scrivere così?

    WHERE cat_id LIKE '%$cat_id%'

    se gli chiedo di filtrarmi tutti i record che contengono la categoria 2 mi restituisce tutti i record giusti oppure tutti quelli il cui campo cat_id contine un 2 come 22, 23 o 42 ecc?
    Basta vivere,
    basta amare ogni momento
    e non porsi alcuna domanda
    sul momento che verrà

  2. #2
    Credo che sia la seconda.
    Per risolvere il problema dovresti aggiungere le due virgole all'inzio e alla fine in questo modo: %,$cat_id,%

    In questo modo ti darà solo le categorie che vuoi. Teoricamente funziona al 100% ma non sono tanto convinto del metodo che stai utilizzando. C'è qualcosa che non mi convince ma non chiedermi cosa perchè non te lo so dire.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2002
    Messaggi
    378
    sarebbe interessante sapere come stanno realmente le cose!

    certo con il tuo sistema dovremmo andare più sul sicuro,
    l'unica cosa è che devo inserire la virgola all'inizio e alla fine del campo altrimenti mi perde il valore iniziale e quello finale!
    Basta vivere,
    basta amare ogni momento
    e non porsi alcuna domanda
    sul momento che verrà

  4. #4
    forse potresti mettere tutti i valori di in un array eliminando le virgole e poi esegui la ricerca all'interno dell'array..
    Era il mio cane!

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2002
    Messaggi
    378
    Questa è un'altra ipotesi che può funzionare ma filtrare direttamente il campo nella query è più semplice una volta capito il corretto funzionamento
    Basta vivere,
    basta amare ogni momento
    e non porsi alcuna domanda
    sul momento che verrà

  6. #6
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Anche io mi trovai nella stessa situazione e risolsi così:

    ... WHERE cat LIKE '%,$cat_id%' OR cat LIKE '%,$cat_id,%' OR cat LIKE '%$cat_id,%'

    Giusto per informazione, in un database relazionale è preferibile utilizzare una tabella a parte che immagazzini le relazioni, piuttosto che usare questo sistema

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2002
    Messaggi
    378
    Ok, forse ci siamo!!

    togli un dubbio utilizzando una tabella relazionale come avrei dovuto organizzare le tabelle per fare questo?

    in origine ho due tabelle:
    1) con le categorie
    2) con i prodotti dove ho il campo cat_id e memorizzo multiple categorie 2,3,5,99,33

    per cui ho una relazione fra prodotti e categorie con tramite il campo cat_id


    Correggimi se sbaglio:

    categorie
    prodotti
    prodotti_categorie

    dove prodotti categorie ha i seguenti campi:
    id
    id_prodotto relazionato con la tabella prodotti
    id_categoria relazionato con la tabella categoria
    Basta vivere,
    basta amare ogni momento
    e non porsi alcuna domanda
    sul momento che verrà

  8. #8
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Originariamente inviato da pmi
    Ok, forse ci siamo!!

    togli un dubbio utilizzando una tabella relazionale come avrei dovuto organizzare le tabelle per fare questo?

    in origine ho due tabelle:
    1) con le categorie
    2) con i prodotti dove ho il campo cat_id e memorizzo multiple categorie 2,3,5,99,33

    per cui ho una relazione fra prodotti e categorie con tramite il campo cat_id


    Correggimi se sbaglio:

    categorie
    prodotti
    prodotti_categorie

    dove prodotti categorie ha i seguenti campi:
    id
    id_prodotto relazionato con la tabella prodotti
    id_categoria relazionato con la tabella categoria
    La stessa identica domanda che feci io.

    Sì esattamente. Ogni record memorizza l'id del prodotto e l'id della categoria. Un database deve essere quanto più atomizzato possibile. Ovvero ad ogni campo deve (dovrebbe) corrispondere una e una sola informazione. Relazionato in questo modo il database risulta forse leggermente più difficile da gestire in un primo momento in fase di inserimento e/o modifica. Ma una volta acquisito il sistema risulterà molto più comodo.

  9. #9
    Giusto.
    Però credo che non ci sia bisogno del campo id per la tabella prodotto_categoria: ragiona: lo stesso prodotto sarà mai meroizzato nella stessa categoria due volte?
    I due campi sono già riempiti con valori univoci perchè valori univoci nelle rispettive tabelle!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.