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

Requêtes MySQL Discussion :

Requête dépendant des résultats de la ligne précédente


Sujet :

Requêtes MySQL

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Par défaut Requête dépendant des résultats de la ligne précédente
    Bonjour,

    J'aimerais effectuer une recherche dans ma table MySQL sur par exemple toutes les lignes où champ1 = 1, mais où champ2 est différent du champ2 de la ligne précédente.

    Soit si par exemple la tables est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      champ1 | champ2
    1#   0   |   1
    2#   1   |   1
    3#   1   |   2
    4#   1   |   2
    5#   1   |   3
    6#   2   |   1
    Il ne sorte que les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      champ1 | champ2
    2#   1   |   1
    3#   1   |   2
    5#   1   |   3
    Les premières et dernières lignes étant éliminées car champ1 != 1
    Et la quatrième car champ2 = champ2-1 (non pas "-1" numériquement, mais champ2 de la ligne précédente).

    Si je mets "WHERE champ2 != champ2-1", il dira que c'est toujours vrai étant donné qu'il remplace champ2 par sa valeur et non pas "champ2-1" comme étant une entitée.


    Ce que je veux faire est-il possible, et si oui, comment ?

    Par avance, merci !

  2. #2
    Membre chevronné Avatar de jota5450
    Inscrit en
    Janvier 2006
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Janvier 2006
    Messages : 263
    Par défaut
    slt...

    pas trop bien compris...

    et si t´as
    champ1 | champ2
    1# 1 | 1
    2# 1 | 1
    3# 1 | 1
    4# 1 | 2
    5# 1 | 1
    tu veus la 1# et la 4# ou la 1# , 4# et 5#?

    si tu veus seulement la 1# et la 4#:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wher champ1 = 1 group by champ2
    . ne donne pas ce que tu veut?


    si tu veut la 1#, 4# et 5#
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select * from table1 t1 where ct1.champ1 = 1 and ct1.champ2 not in
    (select ct2.champ2 from table1 t2 where t2.id=(t1.id-1) and t2.champ1=1);

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    Bon en fait pour l'instant je m'en sors très bien en effectuant mon contrôle sur toutes les données via du PHP derrière, mais j'aurais aimé savoir à titre d'information s'il n'était pas possible de faire ce que je veux directement

    Le GROUP BY n'est pas mal du tout.
    Ce serait exactement ce que je veux, si on pouvait le faire sur un couple de deux champs au lieu de faire sur un seul champ.
    Grouper sur champ2 et champ3, que le couple (champ2, champ3) soit différent (qu'un seul des deux diffère soit suffisant quoi).


    Ensuite, l'idée de faire un NOT IN n'est pas mal, mais la requête dépendant d'un couple dont chacun est sur une table différente ne me paraît pas des plus évidentes...





    En fait, voici le problème en détails.
    J'ai 4 tables : taches, releases, projets, postes.
    Je souhaite lister les tâches dont leur champ 'fin' est non nul (tâches non accomplies), mais dont le couple (idposte, idprojet) n'a pas déjà été listé.
    Sachant que j'accède au champ idposte directement dans la table 'taches', mais pas au champ 'idprojet'.
    Pour accéder au champ 'idprojet' je passe par le champ 'idrlz' qui me renvoit vers la table 'releases' qui elle possède un champ 'idprojet'.

    Via des LEFT JOIN, j'obtiens bien ce que je veux.
    Cependant, n'y a-t-il pas un moyen plus simple de dire qu'un des deux champs idposte ou idprojet doit être différent ?

    Car en fait ça revient à choisir toutes les tâches pour lesquelles la 'fin' est NULL, mais pour lesquelles soit 'idprojet' diffère du résultat précédent, soit 'idposte' diffère du résultat précédent.

    En toute logique, quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND (taches.idposte!=(taches.idposte-1)||projets.projectid!=(projets.projectid-1))
    Mais qui ne marche pas car ça remplace taches.idposte par sa valeur, et projets.projectid par sa valeur.
    Donc si par exemple c'est respectivement 15 et 11, ça teste :
    AND ( (15 != 14) || (11 != 10))
    qui m'a foi me semble normal que cette condition ne serve à rien LoL.

    Je voudrais qu'il remplace (taches.idposte-1) par la valeur du champ idposte de la ligne précédente.


    J'ai essayé d'être au plus clair, j'espère que quelqu'un pourra m'aider !

    PS : Sinon le plus simple serait un GROUP BY sur deux champs pour lesquels un seul différent suffise à accepter la ligne.

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

Discussions similaires

  1. Tester si une requête retourne des résultats
    Par nono27200 dans le forum Sql*Plus
    Réponses: 1
    Dernier message: 10/11/2008, 22h32
  2. [Requête]Concaténation des résultats d'une requête SQL
    Par teks9 dans le forum Développement
    Réponses: 2
    Dernier message: 01/09/2008, 16h34
  3. [MySQL] Savoir si une requête renvoie des résultats
    Par Sytchev3 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 25/10/2007, 15h53
  4. Réponses: 5
    Dernier message: 03/04/2007, 12h08
  5. Réponses: 3
    Dernier message: 20/12/2006, 09h15

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