Partage
  • Partager sur Facebook
  • Partager sur Twitter

#1317 - Query execution was interrupted

Sur une requête imbriquée...

Sujet résolu
    5 mai 2011 à 10:25:13

    Bonjour les gens des Zéros!

    Alors voilà, depuis maintenant pas mal de temps, je veux afficher une liste de personnes qui n'ont pas été contactés depuis au moins 2 mois...

    ma table "personne" contient en gros l'id, le nom, le prénom, l'adresse (enfin les infos de base d'un adhérent quoi...)
    et une table "compte_rendu" qui elle contient une date de visite (date_visite), un commentaire (com_visite), puis l'id_pers en étrangère.

    Donc dans mon tableau, j'aimerai afficher, le nom, le prénom, adresse, la date de la dernière visite ainsi que le commentaire qui est lié.

    j'ai testé ce genre de requête : (Un bonne dizaine en tout, même avec du LEFT JOIN...)


    SELECT *
    FROM personne AS P, compte_rendu AS CR
    WHERE CR.id_pers = P.id_pers
    AND date_visite
    IN ( SELECT MAX( date_visite ) FROM compte_rendu)

    Bon ici je n'ai pas effectué la contrainte pour afficher la liste des personnes non contactés depuis au moins 2 mois...

    Avez-vous une petite idée afin que je puisse avancer?

    Et une autre petite question. Pour afficher la liste des personnes non contactés depuis au moins 2 mois, il faut passer par un mktime?

    Car au début, j'avais pensé à faire ($moisactuelle -2), sauf qu'en janvier et février, ça ne passe pas du tout...

    Merci beaucoup d'avoir si une lumière vient à vous!









    • Partager sur Facebook
    • Partager sur Twitter
      5 mai 2011 à 11:31:36

      La requête ne fait pas du tout ce que tu veux, en fait ce que tu cherches est "les personnes qui n'ont pas de ligne dans compte_rendu plus récent que 2 mois"

      SELECT P.* 
      FROM personne AS P
      LEFT JOIN compte_rendu AS CR 
        ON (P.id_pers = CR.id_pers 
            AND date_visite > now() - INTERVAL 2 MONTH)
      WHERE CR.id_cr IS NULL;
      


      Sinon, tu peux faire aussi :

      SELECT P.* 
      FROM personne AS P
      LEFT JOIN compte_rendu AS CR 
        ON (P.id_pers = CR.id_pers) 
      GROUP BY P.id_pers
      HAVING (max(date_visite) < now() - INTERVAL 2 MONTH) OR (max(date_visite) IS NULL)
      


      ou

      SELECT P.* 
      FROM personne AS P
      WHERE NOT EXISTS( 
        SELECT * FROM compte_rendu AS CR 
        WHERE P.id_pers = CR.id_pers 
            AND date_visite > now() - INTERVAL 2 MONTH)
      ;
      


      La 1è sera sûrement plus rapide.
      • Partager sur Facebook
      • Partager sur Twitter
        5 mai 2011 à 11:58:07

        Lord Casque Noir, tu viens de m'apprendre le système d'intervale et je t'en remercie beaucoup! (J'vais me coucher moins bête ce soir youhouuu!)

        J'ai testé la 1ère et 2ème requête, ça fonctionne à merveille!

        Je dois avoir un problèmes quand même... J'ai testé la 3ème requête qui est une sous requête, et bam, ça ne passe pas et ça balance le code d'erreur #1317 ....

        Mais merci quand même
        • Partager sur Facebook
        • Partager sur Twitter

        #1317 - Query execution was interrupted

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown