2010-06-03 6 views
3

J'ai une application web et je travaille sur un moteur qui analyse les références.MySQL table croisée expression régulière correspondance

Maintenant, j'ai table avec pages vues ainsi que des référés qui ressemble à ceci:

pv_id  referer 
------------------------------------------------------------ 
5531854534 http://www.google.com/search?ie=UTF-8... 
8161876343 http://google.cn/search?search=human+rights 
8468434831 http://search.yahoo.com/search;_... 

La deuxième table contient des définitions de sources telles que:

source  regex 
------------------------------------------------------------ 
Google  ^https?:\/\/[^\/]*google\.([a-z]{2,4})(\/.*)?$ 
Yahoo  ^https?:\/\/[^\/]*yahoo\.com(\/.*)?$ 

Ce que je veux est la troisième table créée par joinin ces deux:

pv_id  source 
------------------------------------------------------------ 
5531854534 Google 
8161876343 Google 
8468434831 Yahoo 

Comment joindre ces tables avec régulière expression?

MISE À JOUR:

changé dernière partie de regex (\/.*|)-(\/.*)?.

+1

Quels sont les pipelines font à la fin de vos expressions régulières? Troisième personnage de la droite? – Konerak

+0

Les dernières parenthèses sélectionnent '/ something' (la partie' \ /.* ') ou doivent être vides (rien après le pipeline :) Ces expressions régulières fonctionnent dans l'éditeur d'expressions régulières. Mais je vais essayer ça sans le pipeline. –

+0

J'ai changé les parentes en '(\ /.*)?' Et ça marche maintenant, merci! –

Répondre

3

Essayez ceci:

select t1.pv_id, t2.source 
from table1 t1 
    inner join table2 t2 on (t1.referer regexp t2.regex) 
+0

Cela ne fonctionne pas. 'SELECT 'http://www.google.com/' REGEXP '^ https?: \/\/[^ \ /] * Google \ .com (\ /.* |) $'' me donne '# 1139 - Got error 'empty (sub) expression' de regexp'. Quelque chose ne va pas avec mes regexes peut-être? –

1

MySQL:

SELECT a.pv_id, b.source 
FROM a, b 
WHERE a.referer REGEXP b.regex 
Questions connexes