2010-11-02 67 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