Domanda

Come posso eseguire una query di selezione su un attributo multivalore?MySQL ha una funzione Seleziona determinati dati da un campo multivalore?Molto aiuto è apprezzato.Ecco un campione del problema:

Tabella

userid      groups
-------------------
  2          2,3,5
  4          1
  9          2,5,10
.

DataType è char(250) per groups

Voglio fare una query per selezionare tutti i generacodicitagcodes che appartengono al Gruppo 5, in questo esempio sarebbe UserID 2 e 9. Quindi:

userid
------
  2
  9
.

Qualche modo per farlo con una query MySQL?o con php / mysql?

È stato utile?

Soluzione

Nel caso in cui il tipo di dati groups sia impostato

Puoi usare

SELECT * FROM users WHERE FIND_IN_SET('5', groups);
.


.

Aggiornamento

In caso di caratteri o varchar.Puoi usare questo

SELECT * FROM users
WHERE 
     groups LIKE '5,%'
     OR groups LIKE '%,5'
     OR groups LIKE '%,5,%'
     OR groups = '5'
.

Altri suggerimenti

Questo è brutto, ma se vuoi farlo completamente in MySQL, potresti fare:

SELECT *
FROM users
WHERE groups LIKE '%,5,%'
OR groups = '5'
OR groups LIKE '%,5'
OR groups LIKE '5,%'
.

Stai meglio con una tabella separata con un gruppo per riga e un riferimento all'indomestico all'utente.Potresti fare un join con una condizione molto più semplice con quello schema.

SELECT users.*
FROM users
INNER JOIN users_groups ON (users.user_id = users_groups.group_id)
WHERE users_groups.group_id = 5
.

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