2010-10-15 8 views
0

J'utilise mysql & perl. Je les valeurs suivantes pour un de mes colonnes dans ma base de données:mysql regex & valeurs distinctes

123 Hollywood 
345 New York 
847 Hollywood 
192 Boston 
876 Chicago 

Je veux sélectionner toutes les villes distinctes .... à savoir, les résultats seraient:

Hollywood 
New York 
Boston 
Chicago 

est-il un moyen de le faire via msyql? J'imagine une sorte de REGEXP mais ne peut pas sembler obtenir la logique:

SELECT * FROM table WHERE address REGEXP '' 
+0

est la partie de nombre de le champ 'address', ou est-ce un ID d'enregistrement dans un champ différent? Si c'est le même champ, cela peut être un peu plus difficile. –

+0

Euh, est-ce que LIMIT 1 ne fait pas l'affaire? – Wrikken

Répondre

0

En supposant que votre adresse est toujours dans le format <numbers><space><city>

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

Voici la données de test j'ai utilisé pour vérifier la requête fonctionne. Notez que j'ai nommé la table de test locations. Mon serveur MySQL est une version 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'); 

Voici la dernière requête que je courais sur cette table:

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

Voici le résultat que je suis:

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

@ginius: Savez-vous quelle est la version de votre serveur MySQL? 5.1, j'espère? J'ai essayé cette requête exacte sur une base de données que j'ai configurée en fonction de ce que vous avez décrit. Peut-être ai-je mal compris un détail, ou peut-être que votre version de MySQL ne supporte pas l'une des fonctions que j'ai utilisées dans la requête. – Thomas

+0

@ginius: Ou est-il possible que vous n'avez pas copié la requête correctement? Il est important qu'il y ait un espace entre les guillemets dans 'SUBSTRING_INDEX (adresse, '', 1)'. – Thomas

Questions connexes