MYSQL问题 - 获得独特的价值

时间:2010-11-02 15:46:34

标签: mysql database function logic

假设我在MySQL中有这两个变量

SET data1 = "1,2,3,apple,4,5";
SET data2 = "apple,orange,5";

如何获得这两个变量上显示的项目数?

2 个答案:

答案 0 :(得分:0)

无法分解列表并计算项目数。用你的母语来操纵值的唯一方法是爆炸它:

php中的示例:

$values = mysql_result();
echo count(explode(",", $values));

另一种方法是将所有标签放在一个单独的表中并将它们连接到数据透视表中,然后你就可以这样做:

select 
    count(*) 
from 
    items 
join 
    pivot on pivot.item_id = items.id 
join 
    tags on pivot.tag_id = tags.id 
where 
    item.id = {itemid}

答案 1 :(得分:0)

如果你真的需要在MySQL端做这个,你可以创建存储过程(或存储函数),其中:

  • 创建临时表(因为MySQL的存储例程无法处理数组,所以你必须使用临时表作为数组)
  • 使用 LOCATE() LEFT() RIGHT()函数创建WHILE周期来解析字符串({ {3}})在临时表中插入每个值
  • 从此临时表
  • 执行所需的选择(使用交叉点等)

但这种解决方案远非优雅。将标签存储在单独的表中(如上所述,每行一个标签)更为可取。