2010-10-15 3 views
0

Я использую mysql & perl. У меня есть следующие значения для одного из моих столбцов в моей базе данных:mysql regex & different values ​​

123 Hollywood 
345 New York 
847 Hollywood 
192 Boston 
876 Chicago 

Я хочу, чтобы выбрать все различные города .... то есть, результаты были бы:

Hollywood 
New York 
Boston 
Chicago 

Есть способ сделать это через msyql? Я предположил бы, что какой-то REGEXP, но не могу показаться, чтобы получить логику:

SELECT * FROM table WHERE address REGEXP '' 
+0

Является ли число частью поле 'address', или это идентификатор записи в другом поле? Если это одно и то же поле, это может быть немного сложнее. –

+0

Erm, не делает ли LIMIT 1' трюк? – Wrikken

ответ

0

Предполагая, что ваш адрес всегда в формате <numbers><space><city>

SELECT 
    DISTINCT TRIM(LEADING SUBSTRING_INDEX(address, ' ', 1) FROM address) AS city 
FROM 
    locations 

Вот тестовых данных я использовал для проверки запрос работает. Обратите внимание, что я назвал тестовую таблицу locations. Мой сервер MySQL является версия 5.1.36:

-- 
-- Table structure for table `locations` 
-- 

CREATE TABLE IF NOT EXISTS `locations` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `address` varchar(255) COLLATE utf8_bin DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `address` (`address`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=6 ; 

-- 
-- Dumping data for table `locations` 
-- 

INSERT INTO `locations` (`id`, `address`) VALUES 
(1, '123 Hollywood'), 
(2, '345 New York'), 
(3, '847 Hollywood'), 
(4, '192 Boston'), 
(5, '876 Chicago'); 

Вот точный запрос я побежал на этой таблице:

SELECT DISTINCT TRIM(
LEADING SUBSTRING_INDEX(address, ' ', 1) 
FROM address) AS city 
FROM locations 

Вот результат я получил:

**city** 
Hollywood 
Boston 
New York 
Chicago 
+0

@ginius: Знаете ли вы, какая версия имеет ваш сервер MySQL? 5.1, надеюсь? Я пробовал этот точный запрос на db, который я настроил на основе того, что вы описали. Возможно, я неправильно понял детали, или, может быть, ваша версия MySQL не поддерживает одну из функций, которые я использовал в запросе. – Thomas

+0

@ginius: Или возможно, что вы не скопировали запрос правильно? Важно, чтобы между кавычками было пробел в 'SUBSTRING_INDEX (адрес, '', 1)'. – Thomas

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