2010-08-05 5 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

Это одно поле с номерами, разделенными запятой? –

+1

Вы могли бы показать таблицу Определение? Ответ SSince althane of different может быть правильным, но каждый из ваших «строк» ​​содержит только 1 поле? или их несколько полей? – Doon

+0

Вот мой стол: ID 2 - 3 - 5 \t объекты 1,2,3,4,5,8,9 - 1,7,9,11,13 - 4,5,6 , 9,10 – Stipe

ответ

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  | 
... 

и тогда вы могли бы просто do:

SELECT DISTINCT facility FROM ... 
+0

Спасибо Феликс, он отлично работает! Теперь я могу легко выбрать, например, FIND_IN_SET (2, объекты) ИЛИ FIND_IN_SET (6, объекты) – Stipe

1

Используйте ответ Кинга, он прибил его лучше, чем я имел бы в любом случае.

+0

Спасибо, Алтан. – Stipe

+0

Я даже не думал о нормализации таблицы, когда он писал (я предположил, что это нормализовано ...). Я чувствую, что теперь я должен был пропустить свой класс базы данных. =) – Althane

0

- удаленно ... потому что это было неправильно/не ответил на вопрос (на основе дополнительных данных). Ответ Феликса Клинга намного лучше.

+0

Я не вижу, как «DISTINCT» должен помочь здесь ... можете ли вы объяснить? Он вернет каждую строку. –

+0

хорошо, когда я ответил, у меня не было остального материала DDL/Tables из его ответа выше (из-за изменений). в моей таблице, да, он будет возвращать каждую строку, но предполагал, что остальные 20 записей могут содержать дубликаты. но читая мой ответ, это неправильно .. Я отредактирую .. – Doon

+0

А-а-а-а-а-а ... теперь я понимаю, как вы поняли вопрос;) –

Смежные вопросы