Vitesse d'une requete

cs_Jackboy Messages postés 757 Date d'inscription vendredi 7 septembre 2001 Statut Membre Dernière intervention 19 juin 2008 - 8 mars 2006 à 22:34
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 - 9 mars 2006 à 02:13
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

cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
8 mars 2006 à 23:24
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
0
cs_Jackboy Messages postés 757 Date d'inscription vendredi 7 septembre 2001 Statut Membre Dernière intervention 19 juin 2008
9 mars 2006 à 00:33
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)...
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
9 mars 2006 à 02:08
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
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
9 mars 2006 à 02:13
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
0
Rejoignez-nous