2010-08-05 65 views
1

我有20行,一行一臺具有例如:如何從MySQL錶行中選擇唯一的數組?

2,3,5,6,8,22 
2,3,5,6,8,22,44,55 
etc. 

如何從MySQL錶行只選擇唯一的號碼,不重複這樣的結果是:

2,3,5,6,8,22,44,55 

表定義:

CREATE TABLE IF NOT EXISTS `test` (

    `id` int(11) NOT NULL auto_increment, 

    `active` tinyint(1) NOT NULL default '1', 

    `facilities` varchar(50) NOT NULL, 

    PRIMARY KEY (`id`) 

) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; 

INSERT INTO `test` (`id`, `active`, `facilities`) VALUES 

(1, 1, '1,3,5,6,7,8'), 

(2, 1, '2,3,4,5,8,9'), 

(3, 1, '4,5,6,7,9,10'); 

這裏是我的嘗試:

SELECT DISTINCT facilities FROM test WHERE active='1' 

$dbgeneral= explode(',', $row['facilities']); 


$facilities = array(

"Air Conditioning" => "2", 

"Balcony" => "4"); 

foreach ($facilities as $facilities=> $v) { 

    if(in_array($v,$dbgeneral)) { 

echo ''; 

} 
} 
+1

這是一個用逗號分隔的數字嗎? – 2010-08-05 17:29:52

+1

你可以顯示錶定義?因爲阿拉坦的獨特答案可能是正確的,但是你的每個「行」是否只包含1個字段?或者是他們的多個領域? – Doon 2010-08-05 17:30:20

+0

這裏是我的表: ID 2 - 3 - 5 \t 設施 1,2,3,4,5,8,9 - 1,7,9,11,13 - 4,5,6 ,9,10 – Stipe 2010-08-05 17:53:23

回答

5

由於這僅僅是一個領域,你可以這樣做:

$result = mysql_query('SELECT facilities FROM table'); 

$facilities = array(); 

while(($row = mysql_fetch_array($result))) { 
    $facilities = array_merge($facilities , explode(',', $row[0])); 
} 

$facilities = array_unique($facilities); 

但是,你應該考慮改變你的數據庫設計,它看起來像你的數據不被標準化。

參考:explode()array_merge()array_unique()


Depening什麼樣的你想要做的查詢,更好的表格佈局是:

| id | facility | 
| 2 | 1  | 
| 2 | 2  | 
| 2 | 3  | 
... 
| 3 | 1  | 
| 3 | 7  | 
| 3 | 9  | 
... 

然後你可以只做:

SELECT DISTINCT facility FROM ... 
+0

感謝費利克斯,它的工程太棒了!現在我可以輕鬆地選擇例如FIND_IN_SET(2,設施)或FIND_IN_SET(6,設施) – Stipe 2010-08-05 18:33:41

1

使用國王的答案,他釘了它比我反正會更好。

+0

謝謝你的鸚鵡。 – Stipe 2010-08-05 18:34:07

+0

當他發佈時我甚至沒有考慮過表格規範化(我認爲它是正常化的......)。我覺得我現在應該已經失敗了我的數據庫類。 =) – Althane 2010-08-05 18:39:32

0

--removed--因爲它錯了/沒有回答這個問題(根據提供的額外數據)。菲利克斯克林的答案好多了。

+0

我看不到'DISTINCT'應該如何幫助...你能解釋一下嗎?它會返回每一行。 – 2010-08-05 18:01:01

+0

嗯,當我回答時,我沒有從上面的答案(由於編輯)的DDL /表的東西的其餘部分。在我的表中,是的,它會返回每一行,但假設其他20條記錄可能包含重複項。但閱讀我的答案是錯誤的..我會編輯.. – Doon 2010-08-05 18:15:15

+0

啊好的....現在我明白你怎麼理解這個問題;) – 2010-08-05 18:17:11