2010-11-02 53 views
0

比方说,我在MySQLMYSQL的问题 - 获得独特的价值

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

这两个变量如何获得项目的数量,关于这两个变量出现?

+0

我不确定我是否正确解释你的问题,但它听起来像你想要的是两个变量(它们具有的共同值)的交集。那是对的吗? – 2010-11-02 15:49:21

+0

这是正确的。 – gumpi 2010-11-02 15:51:01

+0

不确定SQL是否是字符串操作的最佳语言。这有一种反模式的气味... – SWeko 2010-11-02 15:54:01

回答

0

如果你真的需要做到这一点在MySQL端,您可以创建在存储过程(或存储功能):

  • 创建临时表(因为MySQL的存储程序不能处理数组,所以你必须使用临时表作为一个数组)
  • 创建WHILE循环使用LOCATE()LEFT()解析你的字符串和RIGHT()函数MySQL Manual: String functions)在临时表
  • 将每个值进行选择需要(与交叉等)从该临时表

但这种方法实在是远FR being优雅。将标签存储在单独的表中(如上所述,每行一个标签)更加可取。

+0

谢谢,我决定使用不同的方法。 – gumpi 2010-11-04 11:41:04

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} 
+0

是的 - 我可以在PHP上做到这一点,但我希望能够根据我在数据库层上工作的算法对数据进行排序,所以我需要在PHP + MySQL级别上实现完全相同的算法。任何想法你通常如何做到这一点?基本上,我作为一个用户将有一个兼容性号码对付不同的事情,我已经完成了PHP级别的评分,但是当涉及到MySQL时,我有点'卡住 – gumpi 2010-11-02 16:19:56

+0

检查我的编辑。基本上你需要把它们放在一个单独的表格 – RJD22 2010-11-02 16:21:41