Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 2019
-
25 juin 2007 à 13:59
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 2019
-
18 oct. 2007 à 11:33
Bonjour,
Je développe un logiciel qui (entre autre) enregistre des
phrases en les découpant en mot (le pourquoi est un peut compliquer à expliquer
mais est justifiable).
La première table est nommé "Phrase" contient 4
colonnes (ID_Phrase,langue,ID_Mot,Order_Mot)
La seconde table est nommé "Mot" contient 2 colonnes
(ID_Mot,Mot)
Soit
par exemple :
La phrase : "Bonjour tout le monde." sera stocké
dans deux tables :
<!--[if gte vml 1]><v:shapetype
id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" alt="" style='width:24pt;
height:24pt'/><![endif]--><!--[if !vml]--><!--[endif]--> Pour le moment je sais écrire et lire une phrase sans
problème mais je voudrais maintenant savoir si une phrase existe déjà en base
ou non (sachant que je connais les ID_Mot de ma phrase à tester, <!--[if gte vml 1]><v:shape
id="_x0000_i1026" type="#_x0000_t75" alt="" style='width:11.25pt;height:11.25pt'>
<v:imagedata src="file:///C:/DOCUME~1/Vincent/LOCALS~1/Temp/msoclip1/01/clip_image002.gif"
o:href="http://www.sqlfr.com/imgs2/smile_blush.gif"/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]--> je ne sais même pas si ça un intérêt )
Sois avoir une requête à la quelle je passe mes mots (ou référence au mot) et
qui me renvoie un ID_Phrase si la phrase existe ou rien si elle n'existe pas.
Possible ou non à faire sous forme de requête?
Remarque : Je travail sous PostgreSQL.
J'espère avoir été claire.
Merci par avanceAmicalement
Pensez "Réponce acceptée"
A voir également:
Un "select" particulier (je ne sais pas comment faire ni même si c'est possible)
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 26 juin 2007 à 15:44
Bon j'ai une autre requête qui semble juste par
contre il me semble que je suis limité en nombre de requête imbriquée (SVP dites
moi que non)
SELECT ID_Phrase FROM Phrase WHERE ID_Phrase IN (SELECT ID_Phrase FROM Phrase WHERE ID_Mot 0 AND Order_Mot 0 AND ID_Phrase IN (SELECT ID_Phrase FROM Phrase WHERE ID_Mot 1 AND Order_Mot 1 AND ID_Phrase IN (SELECT ID_Phrase FROM Phrase WHERE ID_Mot 2 AND Order_Mot 2 AND ID_Phrase IN (SELECT ID_Phrase FROM Phrase WHERE ID_Mot 3 AND Order_Mot 3
)
)
)
)
GROUP BY ID_Phrase
HAVING(COUNT(ID_Phrase)) = 3
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 25 juin 2007 à 15:46
Je ne sais pas faire de procédure stockée.
Si tu connais un tuto bien je suis preneur.
Par contre mon programme final devra être compatible à toutes les base de données en
passant par l'ODBC (heeeeee, suije claire????) et je crois que la déclaration
d'une procédure stoker n'est pas la même en postgreSQL et en MySQL par exemple
(à moins que je ne dise des grosses conneries???)
Je suis en train de faire un bout de code VB pour faire ce que j'ai demandé,
par contre du coup j'exécute autant de requête qu'il y à de phrase qui commence
par le même mot que la phrase que je teste (désol je n'arive pas à le dire plus clairement). Si tu sais faire une requête qui me retourne les deux phrases
"Tout le monde Bonjour" et "Bonjour Tout le monde" j'aurais
beaucoup moins de teste à faire par la suite.
La fonction VB (informatif et constante à ajouté) :
Private Function PhraseExisteEnBdD(ByRef ReferanceRetour As Long, ByRef TableauMot() As Long) As Boolean
Dim Donnees As ADODB.Recordset
Dim ChaineTansitionTexte As String
Dim ChaineMot As String
Dim Compteur As Long
Dim Compteur2 As Long
Dim Tansition_TexteTrouver As Boolean
Connection.RequeteRecupDonnees "select clef_libelle from transition_texte where num_libelle=" & TableauMot(0) & " and order_libelle=0;", Donnees
ChaineTansitionTexte = Donnees.GetString(adClipString, , Chr(2), Chr(1))
Set Donnees = Nothing
For Compteur = LBound(Split(ChaineTansitionTexte, Chr(1))) To UBound(Split(ChaineTansitionTexte, Chr(1))) - 1
Tansition_TexteTrouver = True
Connection.RequeteRecupDonnees "select num_libelle from transition_texte where clef_libelle=" & Split(ChaineTansitionTexte, Chr(1))(Compteur) & " order by order_libelle;", Donnees
ChaineMot = Donnees.GetString(adClipString, , Chr(2), Chr(1))
Set Donnees = Nothing
If (UBound(TableauMot) - LBound(TableauMot)) = (UBound(Split(ChaineMot, Chr(1))) - 1) - LBound(Split(ChaineMot, Chr(1))) Then
For Compteur2 = LBound(TableauMot) To UBound(TableauMot)
If TableauMot(Compteur2) <> Split(ChaineMot, Chr(1))(Compteur2) Then
Tansition_TexteTrouver = False
End If
Next
Else
Tansition_TexteTrouver = False
End If
If Tansition_TexteTrouver Then
ReferanceRetour = Split(ChaineTansitionTexte, Chr(1))(Compteur)
PhraseExisteEnBdD = True
Exit Function
End If
Next
PhraseExisteEnBdD = False
End Function
Amicalement
Pensez "Réponce acceptée"
Vous n’avez pas trouvé la réponse que vous recherchez ?
dominique.stock
Messages postés436Date d'inscriptionvendredi 7 novembre 2003StatutMembreDernière intervention 8 octobre 20087 25 juin 2007 à 15:57
un truc comme ça .. ?
select id_phrase from phrase where id_mot in (select id_mot from mot where mot in (....))
group by id_phrase
having(count(id_mot)) = nbmot
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 25 juin 2007 à 17:08
Désol pour l'attente (client au tél)
MERCI!!!
Ce n'est pas exactement ce que je voulais (ce qui explique que je ne valide pas ta réponce pour le moment) mais les temps de traitements de mon appli on considérablement réduit graçe à toi (div par ~ 10!!!)
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 25 juin 2007 à 17:30
Hooooo non !!!
Ta solution est bien pour postgreSQL mias il semble que MySQL ne sais pas faire de requete imbriqué.
ici en bas de la page :
http://sql.developpez.com/sqlaz/sousrequetes/ Je garde pour le momant mon code mega long
Merci quand même
Amicalement
Pensez "Réponce acceptée"
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 26 juin 2007 à 14:17
Oups je m'embale
Ca marche pas!!!
Il vaudrais que j'ajoute "having(count(id_mot)) = nbmot" (si non
"Bonjour tout le monde" et "Bonjour tout le monde toto"
serons retourné par ma requête) par contre je n'y arrive pas ???
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 26 juin 2007 à 14:56
Ce coup ci je crois que c'est bon
SELECT ID_Phrase
FROM
Phrase WHERE
ID_Phrase IN
(SELECT
ID_Phrase FROM
Phrase WHERE
ID_Mot = 5 AND
Order_Mot = 0
INTERSECT
SELECT
ID_Phrase FROM
Phrase WHERE
ID_Mot = 6 AND
Order_Mot = 1
INTERSECT
SELECT
ID_Phrase FROM
Phrase WHERE
ID_Mot = 7 AND
Order_Mot = 2)
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 18 oct. 2007 à 11:33
Houlaaaa, pardon
J'ai oublié de terminer ce topic!
Donc j'utilisais la dernierre requète (celles validés). Par contre je dévelope maintenant en DotNet donc par DataSet et ce n'est plus un problème une fois mes données chargé en mémoire de faire tout plein de requete (les temps de traitement sont négligable).
En tout cas Merci à tout ceux qui m'on aidé.
Amicalement
Pensez "Réponse acceptée" <- Et c'est moi qui dit ça!!!