IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Amélioration performance requête [Fait] [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut Amélioration performance requête
    Bonjour,

    J'ai une requête mysql qui fonctionne très bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    $req = "SELECT maj_etat_civil.id_maj,id_user,maj_num_dos,maj_civilite_id, CONCAT(maj_nom,' ', maj_prenom,' ', maj_prenom_usage) as maj_nom,maj_etat_civil.id_trt,
    			CONCAT(tiers_nom,' ',tiers_adr1,' ',tiers_adr2,' ',tiers_adr3,' ',cp,' ',libelle) as maj_prenom
    			FROM ".$prefixe_table."t_users_dossiers
    			LEFT OUTER JOIN ".$prefixe_table."maj_etat_civil 
    			ON t_users_dossiers.id_maj=maj_etat_civil.id_maj
    			LEFT OUTER JOIN ".$prefixe_table."maj_adresses
    			ON t_users_dossiers.id_maj=maj_adresses.id_maj
    			LEFT OUTER JOIN ".$prefixe_table."t_tiers
    			ON t_tiers.id_tiers=maj_adresses.id_tiers
    			LEFT OUTER JOIN ".$prefixe_table."t_ville
    			ON t_ville.ville_id=t_tiers.tiers_ville_id
    			WHERE '".$today."' BETWEEN (gest_date_debut AND gest_date_fin)
    			AND t_users_dossiers.id_trt 
    			BETWEEN 1 AND 4
    			AND maj_etat_civil.id_trt 
    			BETWEEN 1 AND 4
    			AND tiers_nom LIKE '%$argument2%'
    			OR '".$today."'>=gest_date_debut 
    			AND 0<=gest_date_fin
    			AND t_users_dossiers.id_trt 
    			BETWEEN 1 AND 4
    			AND maj_etat_civil.id_trt 
    			BETWEEN 1 AND 4
    			AND tiers_nom LIKE '%$argument2%'
    			OR '".$today."' BETWEEN (gest_date_debut AND gest_date_fin)
    			AND t_users_dossiers.id_trt 
    			BETWEEN 1 AND 4
    			AND maj_etat_civil.id_trt 
    			BETWEEN 1 AND 4
    			AND tiers_adr1 LIKE '%$argument2%'
    			OR '".$today."'>=gest_date_debut 
    			AND 0<=gest_date_fin
    			AND t_users_dossiers.id_trt 
    			BETWEEN 1 AND 4
    			AND maj_etat_civil.id_trt 
    			BETWEEN 1 AND 4
    			AND tiers_adr1 LIKE '%$argument2%'
    			OR '".$today."' BETWEEN (gest_date_debut AND gest_date_fin)
    			AND t_users_dossiers.id_trt 
    			BETWEEN 1 AND 4
    			AND maj_etat_civil.id_trt 
    			BETWEEN 1 AND 4
    			AND tiers_adr2 LIKE '%$argument2%'
    			OR '".$today."'>=gest_date_debut 
    			AND 0<=gest_date_fin
    			AND t_users_dossiers.id_trt 
    			BETWEEN 1 AND 4
    			AND maj_etat_civil.id_trt 
    			BETWEEN 1 AND 4
    			AND tiers_adr2 LIKE '%$argument2%'
    			'".$today."' BETWEEN (gest_date_debut AND gest_date_fin)
    			AND t_users_dossiers.id_trt 
    			BETWEEN 1 AND 4
    			AND maj_etat_civil.id_trt 
    			BETWEEN 1 AND 4
    			AND tiers_adr3 LIKE '%$argument2%'
    			OR '".$today."'>=gest_date_debut 
    			AND 0<=gest_date_fin
    			AND t_users_dossiers.id_trt 
    			BETWEEN 1 AND 4
    			AND maj_etat_civil.id_trt 
    			BETWEEN 1 AND 4
    			AND tiers_adr3 LIKE '%$argument2%'
    			ORDER BY maj_nom, maj_prenom
    			limit $start,$nb_majeur";
    Mon problème est juste au niveau de la performance. Existe-t-il une syntaxe plus légère de requête pour mysql au niveau de mes "OR" ?

    Merci d'avance
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  2. #2
    Rédactrice
    Avatar de xave
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2002
    Messages : 871
    Points : 1 094
    Points
    1 094
    Par défaut
    Salut,

    Là franchement je ne sais pas mais va jeter un oeil , c'est pas forcément du MySQL mais il y a de bons conseils pour optimiser les requêtes.

  3. #3
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Merci Xave, après relecture de ces tutos, je ne vois rien.

    Je pensais plus à la syntaxe de ma requête.
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  4. #4
    Rédactrice
    Avatar de xave
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2002
    Messages : 871
    Points : 1 094
    Points
    1 094
    Par défaut
    Concernant la syntaxe, je ne vois pas ce que tu pourrais modifier...

    Essaie peut-être d'aller poser ta question dans le forum Base de données, c'est plus spécifiquement du SQL que du php, tu y trouveras certainement une meilleure réponse.

    Au besoin je peux déplacer ton message.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 43
    Points : 34
    Points
    34
    Par défaut
    D'après mon gros livre de PHP une requete préparé avec la fonction mysqli_prepare() puis exécuté avec les fonctions qui vont avec serait plus rapide qu'une fonction préparé puis exécuté par mysqli_query().

    je sais pas trop si c'est vrais mais bon tu peux toujours tanté, mais fonctionne que depuis php 5

  6. #6
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Merci, mais le serveur n'est pas encore prêt pour le PHP5.
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  7. #7
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Il faut utiliser des parenthèses pour factoriser tes conditions et éviter les répétitions.

    Si je comprends bien, tu as trois conditions composées :

    - $today est entre gest_date_debut et gest_date_fin, ou bien supérieur à gest_date_debut et gest_date_fin est positive (???)

    - t_users_dossiers.id_trt et maj_etat_civil.id_trt sont entre 1 et 4

    - tiers_nom, tiers_adr1, tiers_adr2 ou tiers_adr3 contient $argument2

    Cela nous donne :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    WHERE ('$today' >= gest_date_debut 
      AND ('$today' <= gest_date_fin OR 0<=gest_date_fin)
    )
    AND t_users_dossiers.id_trt BETWEEN 1 AND 4
    AND maj_etat_civil.id_trt BETWEEN 1 AND 4
    AND (tiers_nom LIKE '%$argument2%' 
      OR tiers_adr1 LIKE '%$argument2%'
      OR tiers_adr2 LIKE '%$argument2%'
      OR tiers_adr3 LIKE '%$argument2%'
    )

    PS : je ne comprends vraiment pas ce que tu fais avec 0<=gest_date_fin... Si tu veux gérer une période avec un début mais sans fin, ce devrait être '$today' >= gest_date_debut AND gest_date_fin IS NULL.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  8. #8
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Merci pour la simplification de la requête.

    Cela donnera plutôt quelque chose comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    WHERE '".$today."' BETWEEN (gest_date_debut AND gest_date_fin)
    			AND t_users_dossiers.id_trt BETWEEN 1 AND 4
    			AND maj_etat_civil.id_trt BETWEEN 1 AND 4
    			AND (tiers_nom LIKE '%$argument2%' 
    			  OR tiers_adr1 LIKE '%$argument2%'
    			  OR tiers_adr2 LIKE '%$argument2%'
    			  OR tiers_adr3 LIKE '%$argument2%'
    			)
    			OR '".$today."'>=gest_date_debut AND gest_date_fin IS NULL
    			AND t_users_dossiers.id_trt BETWEEN 1 AND 4
    			AND maj_etat_civil.id_trt BETWEEN 1 AND 4
    			AND (tiers_nom LIKE '%$argument2%' 
    			  OR tiers_adr1 LIKE '%$argument2%'
    			  OR tiers_adr2 LIKE '%$argument2%'
    			  OR tiers_adr3 LIKE '%$argument2%'
    			)
    			ORDER BY maj_nom, maj_prenom
    			limit $start,$nb_majeur";
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  9. #9
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Tu retombes dans le travers de développer à coup de copier-coller !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    WHERE (
        '$today' BETWEEN (gest_date_debut AND gest_date_fin)
        OR '$today'>=gest_date_debut AND gest_date_fin IS NULL
        )
      AND t_users_dossiers.id_trt BETWEEN 1 AND 4
      AND maj_etat_civil.id_trt BETWEEN 1 AND 4
      AND (tiers_nom LIKE '%$argument2%' 
        OR tiers_adr1 LIKE '%$argument2%'
        OR tiers_adr2 LIKE '%$argument2%'
        OR tiers_adr3 LIKE '%$argument2%'
      )
    ORDER BY maj_nom, maj_prenom
    LIMIT $start,$nb_majeur";
    Une simplification supplémentaire de ta condition today est celle-ci, mais je ne suis pas sûr du tout qu'elle apporte un gain de performance...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WHERE '$today' BETWEEN gest_date_debut 
        AND COALESCE(gest_date_fin, '9999-12-01')
      AND t_users_dossiers.id_trt BETWEEN 1 AND 4
      ...
    On remplace ainsi une fin NULL par une date future qui ne sera jamais atteinte par ton système, classiquement appelée "la fin des temps".
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  10. #10
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Citation Envoyé par Antoun
    Tu retombes dans le travers de développer à coup de copier-coller !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    WHERE (
        '$today' BETWEEN (gest_date_debut AND gest_date_fin)
        OR '$today'>=gest_date_debut AND gest_date_fin IS NULL
        )
      AND t_users_dossiers.id_trt BETWEEN 1 AND 4
      AND maj_etat_civil.id_trt BETWEEN 1 AND 4
      AND (tiers_nom LIKE '%$argument2%' 
        OR tiers_adr1 LIKE '%$argument2%'
        OR tiers_adr2 LIKE '%$argument2%'
        OR tiers_adr3 LIKE '%$argument2%'
      )
    ORDER BY maj_nom, maj_prenom
    LIMIT $start,$nb_majeur";
    Une simplification supplémentaire de ta condition today est celle-ci, mais je ne suis pas sûr du tout qu'elle apporte un gain de performance...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WHERE '$today' BETWEEN gest_date_debut 
        AND COALESCE(gest_date_fin, '9999-12-01')
      AND t_users_dossiers.id_trt BETWEEN 1 AND 4
      ...
    On remplace ainsi une fin NULL par une date future qui ne sera jamais atteinte par ton système, classiquement appelée "la fin des temps".
    Pardon, c'est vrai, je prends les chemins de traverses.

    Bon à part cela, c'est syntaximent beaucoup mieux comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    SELECT maj_etat_civil.id_maj,id_user,maj_num_dos,maj_civilite_id, CONCAT(maj_nom,' ', maj_prenom,' ', maj_prenom_usage) as maj_nom,maj_etat_civil.id_trt,
    			CONCAT(tiers_nom,' ',tiers_adr1,' ',tiers_adr2,' ',tiers_adr3,' ',cp,' ',libelle) as maj_prenom, maj_commentaire
    			FROM ".$prefixe_table."t_users_dossiers
    			LEFT OUTER JOIN ".$prefixe_table."maj_etat_civil 
    			ON t_users_dossiers.id_maj=maj_etat_civil.id_maj
    			LEFT OUTER JOIN ".$prefixe_table."maj_adresses
    			ON t_users_dossiers.id_maj=maj_adresses.id_maj
    			LEFT OUTER JOIN ".$prefixe_table."t_tiers
    			ON t_tiers.id_tiers=maj_adresses.id_tiers
    			LEFT OUTER JOIN ".$prefixe_table."t_ville
    			ON t_ville.ville_id=t_tiers.tiers_ville_id
    			WHERE ('$today' BETWEEN gest_date_debut AND gest_date_fin
    		    OR '$today'>=gest_date_debut AND gest_date_fin IS NULL)
    			AND t_users_dossiers.id_trt BETWEEN 1 AND 4
    			AND maj_etat_civil.id_trt BETWEEN 1 AND 4
    			AND (tiers_nom LIKE '%$argument2%' 
    			  OR tiers_adr1 LIKE '%$argument2%'
    			  OR tiers_adr2 LIKE '%$argument2%'
    			  OR tiers_adr3 LIKE '%$argument2%'
    			  OR cp LIKE '%$argument2%'
    			  OR libelle LIKE '%$argument2%'
    			)
    			ORDER BY maj_nom, maj_prenom
    Par contre pour le "COALESCE" ce qui donnerai cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE ('$today' BETWEEN gest_date_debut AND gest_date_fin
    		    OR '$today'>=gest_date_debut AND COALESCE(gest_date_fin, '9999-12-01'))
    Heu le résultat est que je n'ai plus aucun résultat et j'avoue en lisant la doc
    COALESCE(list)
    Retourne le premier élément non- NULL de la liste :


    mysql> SELECT COALESCE(NULL,1);
    -> 1
    mysql> SELECT COALESCE(NULL,NULL,NULL);
    -> NULL
    que je n'ai pas compris comment cela fonctionnait.

    Merci encore.
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  11. #11
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    COALESCE(gest_date_fin, '9999-12-01') veut dire "si la gest_date_fin est renseignée, on la prend, si elle NULL on prend '9999-12-01'".

    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    '$today' BETWEEN gest_date_debut AND COALESCE(gest_date_fin, '9999-12-01')
    remplace les deux conditions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     '$today' BETWEEN (gest_date_debut AND gest_date_fin) 
    OR '$today'>=gest_date_debut AND gest_date_fin IS NULL )
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  12. #12
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Merci, c'est bien ce que j'avais fait, mais dans ce cas
    '$today' BETWEEN gest_date_debut AND COALESCE(gest_date_fin, '9999-12-01')
    mon résultat est null alors qu'avec
    '$today' BETWEEN (gest_date_debut AND gest_date_fin)
    OR '$today'>=gest_date_debut AND gest_date_fin IS NULL )
    j'ai 30 enregistrements et c'est bon.

    A l'exécution dans le 1er cas, j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT maj_etat_civil.id_maj, maj_num_dos, id_user,maj_civilite_id, maj_nom, maj_prenom, maj_prenom_usage, maj_commentaire,maj_etat_civil.id_trt FROM t_users_dossiers LEFT OUTER JOIN maj_etat_civil ON t_users_dossiers.id_maj=maj_etat_civil.id_maj WHERE ('2007-01-13' BETWEEN gest_date_debut AND COALESCE(gest_date_fin, '9999-12-01')) AND t_users_dossiers.id_trt BETWEEN 1 AND 4 AND maj_etat_civil.id_trt BETWEEN 1 AND 4 and maj_nom like "%ab%" ORDER BY maj_nom, maj_prenom
    Dans le 2ème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT maj_etat_civil.id_maj, maj_num_dos, id_user,maj_civilite_id, maj_nom, maj_prenom, maj_prenom_usage, maj_commentaire,maj_etat_civil.id_trt FROM t_users_dossiers LEFT OUTER JOIN maj_etat_civil ON t_users_dossiers.id_maj=maj_etat_civil.id_maj WHERE ('2007-01-13' BETWEEN gest_date_debut AND gest_date_fin OR '2007-01-13'>=gest_date_debut AND gest_date_fin IS NULL) AND t_users_dossiers.id_trt BETWEEN 1 AND 4 AND maj_etat_civil.id_trt BETWEEN 1 AND 4 and maj_nom like "%ab%" ORDER BY maj_nom, maj_prenom
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  13. #13
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    c'est bizarre... à quoi ressemblent les dates de début et fin des 30 lignes en question ?
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  14. #14
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Sur un extrait j'ai ceci comme date

    + date_debut + date_fin +
    + 2006-10-15 + 0000-00-00 +
    + 2006-10-02 + 0000-00-00 +
    + 2007-01-06 + 0000-00-00 +
    + 2007-01-06 + 0000-00-00 +
    + 2007-01-10 + 0000-00-00 +
    + 2006-11-01 + 0000-00-00 +
    + 2006-11-08 + 0000-00-00 +
    + 2006-11-21 + 0000-00-00 +
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  15. #15
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    donc tes dates de fin ne sont pas NULL mais 0. C'est pour cela que le COALESCE ne marche pas. Il est plus étonnant que le IS NULL fonctionne, mais je suppose que cela s'explique par ta version de MySQL et/ou ton @@sql_mode (qui n'est sans doute pas très strict.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  16. #16
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    mysql 4.1.9.

    Pour ce qui est de @@sql_mode, je ne m'en suis jamais soucié, j'ai laissé les valeurs par défaut lors de l'installation de phpmyadmin.
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Performance requête vb
    Par mariemor64 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 07/06/2007, 12h24
  2. access amélioration performance ouverture
    Par estebandelago dans le forum Access
    Réponses: 2
    Dernier message: 05/03/2007, 14h48
  3. améliorer une requête
    Par papilou86 dans le forum Access
    Réponses: 5
    Dernier message: 22/05/2006, 11h40
  4. [Performances]Requête de sommation
    Par m-mas dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 09/11/2005, 11h38
  5. [Access] Optimisation performance requête - Index
    Par fdraven dans le forum Access
    Réponses: 11
    Dernier message: 12/08/2005, 14h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo