Vitesse d'une requete

Signaler
Messages postés
757
Date d'inscription
vendredi 7 septembre 2001
Statut
Membre
Dernière intervention
19 juin 2008
-
Messages postés
586
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 février 2010
-
Sous asp3, j'ai crée un calendrier événementielle et j'indique à l'utilisateur via une icone qu'un événement est présent pour tel jour. Ma requete est donc créer pour toute les journées du mois. Je me demande donc quelle requete serait la moin gourmante en processus.

Ma requete pour le moment si o_EnrDate > 0 alors j'affiche l'icone:


'verifier si un event est present pour une journee
Public Sub EventBdDay(o_EnrDate, i_Year, i_Month, i_Day)

If i_Year <> "" and i_Month <> "" and i_Day <> "" Then
CreateRs rsItem, 1, 1 SQL_Query "SELECT Event_Id FROM Event Where Event_Date_Start '" & i_Day & "/" & i_Month & "/" & i_Year & "'"
rsItem.Open SQL_Query, strCon
o_EnrDate = rsItem.recordcount
CloseRS(rsItem) 'call de la sub pour fin du recordset
end if
End Sub

4 réponses

Messages postés
586
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 février 2010
1
re,

y a-t-il un seul événement par jour ?
y a-t-il plusieurs événements par jour par utilisateur (je vois que tu ne passes aucun paramètres concernant l'utilisateur courant... ? ) ?
quelle base de donnée utilises-tu (tu pourrais sortir tous les événements du mois pour un utilisateur en une seule requête)?

yopyop
Messages postés
757
Date d'inscription
vendredi 7 septembre 2001
Statut
Membre
Dernière intervention
19 juin 2008

Salut !

Je suis sur une bd access, il peut y avoir plusieur evenement par jour, mais les evenement sont multi usager. L'application est utiliser simultanément par plusieur utilisateur. l'application est tres lente, je me demande si je vais migrer vers une autre bd(mysql ou sqlserver)...
Messages postés
586
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 février 2010
1
salut,

tu peux utiliser

SELECT Count(*) AS nbEvents, event_start_date, DAY(event_start_date) as zeDay
FROM EVENTS
WHERE MONTH(event_start_date)=3
AND YEAR(event_start_date)=2006
GROUP BY event_start_date
ORDER BY event_start_date ASC

tu initialises une variable iDay à 1 (jour en traitement)
ensuite tu parcours ton recordset (d'abord tester s'il n'est pas vide...)

do while not ors.eof
if iDay<CInt(ors.fields("zeday").value) Then
'pas d'event pour le jour
'on affiche les jours de iDay à ors.fields("zeday").value-1 comme vide
For i= iDay to CInt(ors.fields("zeday").value)-1
'ton affichage du genre
response.write i & "/" & iMonth & "/" & iYear & " - 0 event
"
Next
iDay = CInt(ors.fields("zeday").value)
'affichage des infos de la base (date, nombre d'event)
response.write ors.fields("zeday").value & "/" & iMonth & "/" & iYear & " - " & ors.fields("nbEvents").value & " events
"
Else
'affichage des infos de la base (date, nombre d'event)
response.write ors.fields("zeday").value & "/" & iMonth & "/" & iYear & " - " & ors.fields("nbEvents").value & " events
"
End If
iDay=iDay+1
ors.movenext
loop

ensuite tu contrôles si iday<nombre de jour dans le mois :
non->traitement terminé
oui-> afficher la liste de jours restants

bref... un truc du genre...

yopyop
Messages postés
586
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 février 2010
1
correction (ca fait quelques lignes de moins dans la boucle )

do while not ors.eof

if iDay<CInt(ors.fields("zeday").value) Then 'si c'est le cas, il n'y a pas d'envetns entre iDay et la date, attention iDay ne devrai jamais être>queCInt(ors.fields("zeday").value)

'on affiche les jours de iDay à ors.fields("zeday").value-1 comme vide
For i= iDay to CInt(ors.fields("zeday").value)-1
'ton affichage du genre
response.write i & "/" & iMonth & "/" & iYear & " - 0 event
"
Next
iDay = CInt(ors.fields("zeday").value)
end if
'maintenant le jour suivant est un jours avec un(des) event(s)
'affichage des infos de la base (date, nombre d'event)
response.write ors.fields("zeday").value & "/" & iMonth & "/" & iYear & " - " & ors.fields("nbEvents").value & " events
"
'on passe au jour suivant
iDay=iDay+1
ors.movenext
loop

yopyop