Vamos dizer que eu tenho essas duas variáveis no MySQL
SET data1 = "1,2,3,apple,4,5";
SET data2 = "apple,orange,5";
Como faço para obter o número de itens que aparece nessas duas variáveis?
Respostas:
0 para resposta № 1Se você realmente precisa fazer isso no MySQL, você pode criar um procedimento armazenado (ou função armazenada) no qual:
- criar tabela temporária (porque as rotinas armazenadas do MySQL não podem manipular arrays, então você tem que usar tabela temporária como um array)
- crio ENQUANTO ciclo para analisar suas cordas usando LOCALIZAR(), ESQUERDA() e CERTO() funções (Manual do MySQL: Funções String) inserindo todos os valores na tabela temporária
- execute select necessário (com interseções e assim por diante) desta tabela temporária
Mas esta solução está longe de ser elegante. Armazenar tags em tabela separada (como mencionado acima, uma tag por linha) é muito mais preferível.
0 para resposta № 2
Não há como explodir a lista e contar os itens. A única maneira de explodi-lo em sua linguagem nativa manipulando o valor:
Exemplo em php:
$values = mysql_result();
echo count(explode(",", $values));
A outra maneira é colocar todas as tags em uma tabela separada e juntá-las em uma tabela dinâmica, então você pode fazer algo assim:
select
count(*)
from
items
join
pivot on pivot.item_id = items.id
join
tags on pivot.tag_id = tags.id
where
item.id = {itemid}