Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[1/2 BRUIT] requète

2 réponses
Avatar
jacques trepp
bonjour,

dans le cadre de l'exploitation d'un planning, j'utilise une requète.
Cette requète est normalement rapide, mais je suis obligé d'aller
chercher des renseignements sur une autre table avant d'afficher le
planning. c'est la 2eme partie du traitement qui est lente.
Je suis en postgresql + sqlmanagerx + c_postgresql4wd.wdc.
voici la requète et le traitement qui suit :

g_requete = "SELECT PLCLEUNIK, SUIVIPAR.ABREGE, HEURE, CODEAGE.CODEAGE, "...
+"LIBELLE, PLANNING.DOSSIER_KUNIK AS PLANDOS, CODEAGE.COULEUR "...
+"FROM PLANNING "...
+"INNER JOIN SUIVIPAR ON PLANNING.CODESUIVI = SUIVIPAR.CODESUIVI "...
+"INNER JOIN CODEAGE ON PLANNING.CODEAGE = CODEAGE.AGCLEUNIK "...
+"WHERE DATE2 = " + MySql4:mysqldateformat(date_en_cours) ...
+test_complementaire...
+" ORDER BY HEURE, suivipar.abrege, codeage.codeage"
g_requete = Minuscule(g_requete)
VersPressePapier(g_requete)
MySql4:mySQLFerme(g_num_requete)
SI PAS MySql4:mySQLExec(g_requete,g_num_requete) ALORS
VersPressePapier(g_requete)
MySql4:mySQLMsgBox("erreur")
SINON
MySql4:mySQLTable(g_num_requete,Table1)
MySql4:mySQLFerme(g_num_requete)
FIN

-------------------- ça, c'est rapide.
POUR ind = 1 A TableOccurrence(Table1)
SI t_heure[ind] >= "13:00:00" ALORS
liste_en_cours1 = "LISTE2"
liste_en_cours2 = "LISTE2_1"
FIN
tpc = t_libelle[ind]
g_retour = DOB:SQLLitRecherche("DOSSIER_KUNIK = "+t_dossier[ind])
SI g_retour > 0 ALORS
tpc = DOB:m_POURCONTR
FIN
tdc=Gauche(t_heure[ind],2)+"h"+Milieu(t_heure[ind],4,2)
SI t_couleur[ind] <> 0 ALORS

ListeAjoute(liste_en_cours1,gFond(t_couleur[ind])+gStylo(iNoir)+Complète(t_abrege[ind],4)+tdc+sep+t_codeage[ind]+sep+SansEspace(tpc))
SINON

ListeAjoute(liste_en_cours1,gFond(iBlanc)+gStylo(iNoir)+Complète(t_abrege[ind],4)+tdc+sep+t_codeage[ind]+sep+SansEspace(tpc))
FIN

ListeAjoute(liste_en_cours2,t_cleunique[ind])
// multitache(-1)
FIN
--------------------------------- ça, c'est lent :(
et si j'active le multitache(-1), c'est encore pire visuellement.

j'aimerais utiliser ma requète comme suit :

select plcleunik, suivipar.abrege, heure, codeage.codeage, libelle,
planning.dossier_kunik, dosbase.pourcontr as plandos, codeage.couleur
from planning
inner join suivipar on planning.codesuivi = suivipar.codesuivi
inner join codeage on planning.codeage = codeage.agcleunik
inner join dosbase on dosbase.dossier_kunik = planning.dossier_kunik
where date2 = '20060905' order by heure, codeage.codeage, suivipar.abrege

j'ai ajouté dosbase.pourcontr dans la liste des colonnes, et l'inner
join suivant :
inner join dosbase on dosbase.dossier_kunik = planning.dossier_kunik


c'est beaucoup plus rapide. Le problème est que tous mes rendez-vous ne
sont pas forcément reliés à des dossiers, et dans ce cas, l'ajout de :
inner join dosbase on dosbase.dossier_kunik = planning.dossier_kunik
ne me retourne que les RDV reliés à un dossier.

pourrait-on ajouter un test pour ne faire l'inner join que si V et
supérieur à zéro ?

Pardon pour la longueur de ce post, et merci d'avance à ceux qui auront
le courage de lire jusqu'au bout. :)

--
Jacques Trepp
Albygest - 81160 - St Juery
jacques-pas de spam.trepp@free.fr
(enlever '-pas de spam' pour me joindre)
http://www.albygest.com

2 réponses

Avatar
jacques trepp
jacques trepp a écrit :
/CUT
pourrait-on ajouter un test pour ne faire l'inner join que si V et
supérieur à zéro ?


...
Voilà la "vraie" question :)
pourrait-on ajouter un test pour ne faire l'inner join que si
planning.dossier_kunik est > supérieur à zéro ?

--
Jacques Trepp
Albygest - 81160 - St Juery
jacques-pas de
(enlever '-pas de spam' pour me joindre)
http://www.albygest.com
Avatar
Jerome PAULIN
> j'aimerais utiliser ma requète comme suit :

select plcleunik, suivipar.abrege, heure, codeage.codeage, libelle,
planning.dossier_kunik, dosbase.pourcontr as plandos, codeage.couleur
from planning
inner join suivipar on planning.codesuivi = suivipar.codesuivi
inner join codeage on planning.codeage = codeage.agcleunik
inner join dosbase on dosbase.dossier_kunik = planning.dossier_kunik
where date2 = '20060905' order by heure, codeage.codeage, suivipar.abrege





Bonjour,

A mon avis, il suffit de faire un left join dosbase au lieu d'un inner
join dosbase, ca te prendra aussi les enregistrement qui n'ont pas
d'enregistrement correspondant dans la table dosbase.dossier

gg