Requete sql en php trop longue
Résolu/Fermé
Christr
Messages postés
319
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
19 janvier 2011
-
27 juil. 2009 à 14:22
Christr Messages postés 319 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 19 janvier 2011 - 31 juil. 2009 à 14:00
Christr Messages postés 319 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 19 janvier 2011 - 31 juil. 2009 à 14:00
A voir également:
- Requete sql en php trop longue
- Easy php - Télécharger - Divers Web & Internet
- Blob sql ✓ - Forum Webmastering
- Traitement abandonné la vidéo est trop longue ✓ - Forum YouTube
- Erreur lors de l'envoi de la requête facebook marketplace - Forum Facebook
- Youtube mp3 longue durée ✓ - Forum YouTube
8 réponses
jeangilles
Messages postés
816
Date d'inscription
samedi 21 juin 2008
Statut
Membre
Dernière intervention
17 juillet 2012
186
27 juil. 2009 à 15:18
27 juil. 2009 à 15:18
or die or die ("Sending the request impossible.");
le premier or die est de trop, essaies sans (et le point virgule devant aussi faut l'enlever ) ^^
le premier or die est de trop, essaies sans (et le point virgule devant aussi faut l'enlever ) ^^
Christr
Messages postés
319
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
19 janvier 2011
46
27 juil. 2009 à 15:51
27 juil. 2009 à 15:51
O la ... l'aveugle que je suis
Merci sa marche nickel à présent
yaouuuuuuuu
Merci sa marche nickel à présent
yaouuuuuuuu
imw
Messages postés
233
Date d'inscription
vendredi 17 juillet 2009
Statut
Membre
Dernière intervention
8 septembre 2011
42
27 juil. 2009 à 17:23
27 juil. 2009 à 17:23
ta requette est toujours aussi longue ???
ça me parait beaucoup trop long (sauf si tu as plusieurs centaines de milliers de lignes ... et encore)
Pour optimiser un petit peu le temps :
- les between ne sont peut être pas utile, puisque tu as déjà p2.date>p1.date , il suffirait que p1.date>datedébut et que p2.date<datedefin
- remplace le LIKE 'absence' par = 'absence'
Beaucoup plus important, vérifie que les champs utilisés pour la recherche soient tous indexés :
- id
- date
- etat
- site
d'ailleur ? c'est quoi comme info le $code ?
ça me parait beaucoup trop long (sauf si tu as plusieurs centaines de milliers de lignes ... et encore)
Pour optimiser un petit peu le temps :
- les between ne sont peut être pas utile, puisque tu as déjà p2.date>p1.date , il suffirait que p1.date>datedébut et que p2.date<datedefin
- remplace le LIKE 'absence' par = 'absence'
Beaucoup plus important, vérifie que les champs utilisés pour la recherche soient tous indexés :
- id
- date
- etat
- site
d'ailleur ? c'est quoi comme info le $code ?
Christr
Messages postés
319
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
19 janvier 2011
46
28 juil. 2009 à 09:56
28 juil. 2009 à 09:56
juste une chaine de caractère pour l'id
imw
Messages postés
233
Date d'inscription
vendredi 17 juillet 2009
Statut
Membre
Dernière intervention
8 septembre 2011
42
>
Christr
Messages postés
319
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
19 janvier 2011
28 juil. 2009 à 10:33
28 juil. 2009 à 10:33
et tu es obligé d'utiliser un LIKE '$code%' ????
Ca ca peut faire ramer ...
Tu as vérifier les index sur les champs ?
Ca ca peut faire ramer ...
Tu as vérifier les index sur les champs ?
imw
Messages postés
233
Date d'inscription
vendredi 17 juillet 2009
Statut
Membre
Dernière intervention
8 septembre 2011
42
27 juil. 2009 à 17:24
27 juil. 2009 à 17:24
et essaye d'indenter ton code SQL (tu as le droit )
SELECT p1.id, TIMEDIFF( p2.date, p1.date ) as duree FROM atrium p1, atrium p2 WHERE p1.id LIKE '$code%' AND p1.site = p2.id AND p1.etat LIKE 'absence' AND p2.site LIKE '$code%' AND p2.etat = 'retour' AND p2.date > p1.date AND p1.date = ( SELECT max( p.date ) FROM atrium p WHERE site LIKE '$code%' AND etat = 'absence' AND p.date < p2.date ) AND p1.date BETWEEN '2008-08-08 10:10:10' AND '2008-09-09 10:10:10' AND p2.date BETWEEN '2008-08-08 10:10:10' AND '2008-09-09 10:10:10' ORDER BY p1.site, duree
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Christr
Messages postés
319
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
19 janvier 2011
46
28 juil. 2009 à 13:00
28 juil. 2009 à 13:00
SELECT p1.id, TIMEDIFF( p2.date, p1.date ) as duree
FROM atrium p1, atrium p2
WHERE p1.id LIKE '$code%'
AND p1.site = p2.id
AND p1.etat LIKE 'absence'
AND p2.site LIKE '$code%'
AND p2.etat = 'retour'
AND p2.date > p1.date
AND p1.date = ( SELECT max( p.date )
FROM atrium p
WHERE id LIKE '$code%'
AND etat = 'absence'
AND p.date < p2.date )
AND p1.date BETWEEN '2008-08-08 10:10:10' AND '2008-09-09 10:10:10'
AND p2.date BETWEEN '2008-08-08 10:10:10' AND '2008-09-09 10:10:10'
ORDER BY p1.id, duree
Pardon il n y a pas de site c'étais dans l'ancienne base a présent c'est id
et donc id et date son indexé par contre etat non puisqu il ne peut comporter que deux valeurs est ce utile ou non ?
FROM atrium p1, atrium p2
WHERE p1.id LIKE '$code%'
AND p1.site = p2.id
AND p1.etat LIKE 'absence'
AND p2.site LIKE '$code%'
AND p2.etat = 'retour'
AND p2.date > p1.date
AND p1.date = ( SELECT max( p.date )
FROM atrium p
WHERE id LIKE '$code%'
AND etat = 'absence'
AND p.date < p2.date )
AND p1.date BETWEEN '2008-08-08 10:10:10' AND '2008-09-09 10:10:10'
AND p2.date BETWEEN '2008-08-08 10:10:10' AND '2008-09-09 10:10:10'
ORDER BY p1.id, duree
Pardon il n y a pas de site c'étais dans l'ancienne base a présent c'est id
et donc id et date son indexé par contre etat non puisqu il ne peut comporter que deux valeurs est ce utile ou non ?
Christr
Messages postés
319
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
19 janvier 2011
46
28 juil. 2009 à 13:01
28 juil. 2009 à 13:01
(comment as tu fait pour mettre en forme ? )
imw
Messages postés
233
Date d'inscription
vendredi 17 juillet 2009
Statut
Membre
Dernière intervention
8 septembre 2011
42
28 juil. 2009 à 14:53
28 juil. 2009 à 14:53
il faut indexer toutes les colonnes qui servent aux recherches ... sinon, mysql est obligé de scruter toutes les lignes.
D'ailleurs si la colonne etat ne contient que 2 valeurs, tu devrai utiliser le type ENUM(absent,retour) et pas CHAR. Comme ça, au lieu de tester une chaine de caractère, ça reviendrai à tester 0 ou 1 ... beaucoup plus rapide (même si tu ne change rien à ta requête).
Pour la mise en forme, tu as les boutons Gras,Italique,Souligné et Code juste au dessus du champ de saisie ...
D'ailleurs si la colonne etat ne contient que 2 valeurs, tu devrai utiliser le type ENUM(absent,retour) et pas CHAR. Comme ça, au lieu de tester une chaine de caractère, ça reviendrai à tester 0 ou 1 ... beaucoup plus rapide (même si tu ne change rien à ta requête).
Pour la mise en forme, tu as les boutons Gras,Italique,Souligné et Code juste au dessus du champ de saisie ...
Christr
Messages postés
319
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
19 janvier 2011
46
31 juil. 2009 à 14:00
31 juil. 2009 à 14:00
Je te remercie après indexation cela fonctionne beaucoup mieux
j'avais une erreur de date dans un ligne ce qui fessait bouclé la requete
mais c'est résolue merci encore
j'avais une erreur de date dans un ligne ce qui fessait bouclé la requete
mais c'est résolue merci encore