Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/08/2011, 16h23   #1
Invité de passage
 
Inscription : août 2008
Messages : 22
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 22
Points : 3
Points : 3
Par défaut REGEXP dans une jointure ?

Bonjour à tous,

Je voudrais savoir si c'est possible d'utiliser une expression régulière dans une jointure ?

En fait, le but est de lier 2 tables qui n'ont pas été conçues pour ça au départ...
Dans la table qui me pose problème, il existe un champs "lien" avec l'id de l'article (ex: page?id=1).

J'aimerais pouvoir extraire l'id pour pouvoir faire la liaison avec l'id de ma table principale.

Voici l'idée (qui ne fonctionne pas évidemment) :

Code :
1
2
SELECT * FROM table1
LEFT JOIN table2 ON (SELECT table2.link REGEXP '[0-9+]') = table1.id
Merci
lornkor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 20h26   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 019
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 019
Points : 18 302
Points : 18 302
Envoyer un message via MSN à CinePhil
As-tu essayé sans le SELECT après le ON ?
Code :
LEFT JOIN table2 ON table2.link REGEXP '[0-9+]' = table1.id
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 09h14   #3
Invité de passage
 
Inscription : août 2008
Messages : 22
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 22
Points : 3
Points : 3
Bonjour,

Ca ne fonctionne pas non plus.
Je pense que je fais fausse route ...
C'est la 1ère fois que j'utilise REGEXP
D'après la doc SQL, le résultat d'une expression régulière est toujours 0 ou 1,alors que je voudrais récupérer la valeur du champs ciblé ...

Je me trompe ?
Qu'en dites-vous ?
lornkor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 09h37   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 019
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 019
Points : 18 302
Points : 18 302
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par lornkor Voir le message
C'est la 1ère fois que j'utilise REGEXP
D'après la doc SQL, le résultat d'une expression régulière est toujours 0 ou 1
Exact ! J'avais oublié ce détail !
Alors essaie avec un LIKE mais les performances risquent de ne pas être terribles si tu as beaucoup de lignes :
Code :
LEFT JOIN table2 ON table2.link LIKE CONCAT('%', table1.id), '%')
Mais tu aurais intérêt à changer le modèle de données !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 11h34   #5
Invité de passage
 
Inscription : août 2008
Messages : 22
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 22
Points : 3
Points : 3
Citation:
Alors essaie avec un LIKE ...
Ca pourrait faire l'affaire en un 1er temps mais il y a un soucis ...
Avec l'id suivant par exemple : 1816
Il va me sortir les résultats suivants : 1816, 181, 816, ...

Citation:
Mais tu aurais intérêt à changer le modèle de données !
C'est un projet récupéré en cours de dev.
Pas le temps de le retourner dans tous les sens pour l'instant
Le monde est sans pitié
lornkor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 11h56   #6
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
La structure de vos données dans la colonne "link" est elle normalisée ?
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 12h02   #7
Invité de passage
 
Inscription : août 2008
Messages : 22
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 22
Points : 3
Points : 3
Que voulez-vous dire par normalisée ?

Les données sont en faite des liens.
C'est toujours la même page (ex: page.php)
  • page.php?id=1
  • page.php?id=351
  • page.php?id=1201
  • etc ...
lornkor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 12h15   #8
Invité de passage
 
Inscription : août 2008
Messages : 22
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 22
Points : 3
Points : 3
Bin oui , l'idée est toute trouvée

Citation:
LEFT JOIN table2 ON table2.link LIKE CONCAT('page.php?id=', table1.id), '%')
Je pense que c'est bon ainsi
Merci à tous !
lornkor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 12h20   #9
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Ce que je veux dire c'est , est ce que vos données dans la colonne "link" sont toujours du type :

xxxxx?id=monlien

?

Si oui, passez par les fonctions d'extractions de chaine et de recherche de position dans une chaine ...

Genre


Code :
LEFT JOIN table2 ON (SUBSTRING (table2.link , INSTR(link,"?id=") + 5) = table2.id)
A tester, a adapter ... Cela va certainement penaliser les performances de l'appli, mais en peut il etre autrement ?
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 12h22   #10
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Et bien c'est encore plus simple comme vous l'avez fait
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 12h46   #11
Invité de passage
 
Inscription : août 2008
Messages : 22
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 22
Points : 3
Points : 3
Ha oui, c'est une autre solution ...
J'ai appris plein de truc grâce à ce problème

Merci à vous !
lornkor est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h30.


 
 
 
 
Partenaires

Hébergement Web