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

MS SQL Server Discussion :

ou placer distinct (suite)


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 58
    Points : 44
    Points
    44
    Par défaut ou placer distinct (suite)
    Excusez-moi, je crois qu'il faut placer un autre distinct qqpart mais je ne sais absolument pas où !!

    En fait, je remets au-dessous un echo de ma requete.
    Elle fonctionne correctement.
    Sauf quand je navigue de page en page.
    Je veux dire que là par exemple j'ai 27 lignes en retour de ma requete
    et comme c'est une pagination avec un affichage 25 lignes
    ma premiere page s'affiche correctement : je liste bien les 25 premiers résultats, mais quand je clique pour aller sur la page 2
    (où je devrais voir les résultats 26 et 27)
    j'ai 5 réponses (23 à 27)

    je sens bien que c'est parce que dans la 1ere requete (celle qui commence par top 0, il me manque un distinct, mais j'ai fait plusieurs essais et ca plante tjrs).

    Le code quand il fonctionne bien (mais pas bon sur la page 2) :
    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
    SELECT top 25 * FROM ( 
    select distinct id_four, code_four, nom_four, npay_four,
    ntva_four, nsir_four, nnic_four, hcee_four, cp_four, vill_four,
    date_fhis, stat_four, libe_stat, comm_four from fournisseurs
    left join statuts on id_stat=stat_four 
    left join fournisseurs_histo on (four_fhis=id_four and type_fhis='1') 
    left join fournisseurs_envir on four_fenv=id_four 
    where ( id_four) NOT IN ( 
    select top 0 id_four from fournisseurs
    left join statuts on id_stat=stat_four 
    left join fournisseurs_histo on (four_fhis=id_four and type_fhis='1') 
    left join fournisseurs_envir on four_fenv=id_four 
    where desa_four='N' and ( envi_fenv='CA' or envi_fenv='DE' ) order by code_four )
    and desa_four='N' and ( envi_fenv='CA' or envi_fenv='DE' ) 
    ) T_RESULTAT order by code_four

    Ce que j'ai essayé mais qui plante :

    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
    SELECT top 25 * FROM ( 
    select distinct id_four, code_four, nom_four, npay_four, 
    ntva_four, nsir_four, nnic_four, hcee_four, cp_four, vill_four,
    date_fhis, stat_four, libe_stat, comm_four from fournisseurs
    left join statuts on id_stat=stat_four 
    left join fournisseurs_histo on (four_fhis=id_four and type_fhis='1') 
    left join fournisseurs_envir on four_fenv=id_four 
    where ( id_four) NOT IN ( 
    select top 0 [b]distinct(id_four)[/b] from fournisseurs 
    left join statuts on id_stat=stat_four 
    left join fournisseurs_histo on (four_fhis=id_four and type_fhis='1') 
    left join fournisseurs_envir on four_fenv=id_four 
    where desa_four='N' and ( envi_fenv='CA' or envi_fenv='DE' ) order by code_four )
    and desa_four='N' and ( envi_fenv='CA' or envi_fenv='DE' ) 
    ) T_RESULTAT order by code_four
    avec cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: MS SQL message: Syntaxe incorrecte vers le mot clé 'distinct'. (severity 15) in d:\www\baccara\fournisseurs\fournisseurs_rech.php on line 458

    Je sens bien que je suis un peu lourdingue
    mais j'arrive du monde MySQL où tout est tellement simple (lol)

  2. #2
    Membre actif
    Inscrit en
    Février 2003
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 182
    Points : 206
    Points
    206
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select top 0 id_four from fournisseurs...
    J'aimerai comprendre le TOP 0 il sert à quoi ?

    A+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    top 0 c'est pour démarrer de 0
    normalement, il n'y a pas de 0, c'est une variable
    c'est parce que là j'ai fait un echo du résultat de ma requete

    par exemple, sur ma page 2 qd je navigue (pour avoir en fait les enregistrements 26 à 50), si je fais un echo du résultat, la requete est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT top 25 * FROM ( select distinct id_four, code_four, nom_four, npay_four, ntva_four, nsir_four, nnic_four, hcee_four, cp_four, vill_four, date_fhis, stat_four, libe_stat, comm_four from fournisseurs left join statuts on id_stat=stat_four left join fournisseurs_histo on (four_fhis=id_four and type_fhis='1') left join fournisseurs_envir on four_fenv=id_four where ( id_four) NOT IN ( select top 25 id_four from fournisseurs left join statuts on id_stat=stat_four left join fournisseurs_histo on (four_fhis=id_four and type_fhis='1') left join fournisseurs_envir on four_fenv=id_four where desa_four='N' and ( envi_fenv='CA' or envi_fenv='DE' ) order by code_four ) and desa_four='N' and ( envi_fenv='CA' or envi_fenv='DE' ) ) T_RESULTAT order by code_four
    mais le 1er top en haut est ma variable $ParPage (ici c'est 25 car 25 résultats par page) et le 2eme top à l'intérieur représente une variable $limit qui est à partir de quel résultat on liste selon sur quel page on est : 0 pour la page 1; 25 pour la page 2 ; 50 pour la page 3 etc...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    c'est ce que j'avais trouvé ici sur ce forum qui est l'quivalent du limit de mysql

    et ca fonctionne super bien

    sauf que maintenant que j'ai un pb de doublon
    et que je dois ajouter un distinct
    je suis un peu perdue

  5. #5
    Membre actif
    Inscrit en
    Février 2003
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 182
    Points : 206
    Points
    206
    Par défaut
    A la manière de la première solution tu utilises d'abord le TOP dans une sous requête puis tu fais le distinct from cette sous requête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    not in 
    (select distinct id_four
    from(
    select top 0 id_four from fournisseurs 
    left join statuts on id_stat=stat_four 
    left join fournisseurs_histo on (four_fhis=id_four and type_fhis='1') 
    left join fournisseurs_envir on four_fenv=id_four 
    where desa_four='N' and ( envi_fenv='CA' or envi_fenv='DE' )
     order by code_four )
    )
    A+

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    ok, ca y est je crois bien que c'est bon
    mais il a fallu que je mette le distinct à l'intérieur et que je sorte à l'extérieur le select top

    enfin ça a l'air de fonctionner
    merci de votre aide

    je vous marque le code qui fontionne si ça peut aider quelqu'un


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT top 25 * FROM ( select distinct id_four, code_four, nom_four, npay_four, ntva_four, nsir_four, nnic_four, hcee_four, cp_four, vill_four, date_fhis, stat_four, libe_stat, comm_four from fournisseurs left join statuts on id_stat=stat_four left join fournisseurs_histo on (four_fhis=id_four and type_fhis='1') left join fournisseurs_envir on four_fenv=id_four where ( id_four) NOT IN ( select top 0 id_four from ( select distinct id_four from fournisseurs left join statuts on id_stat=stat_four left join fournisseurs_histo on (four_fhis=id_four and type_fhis='1') left join fournisseurs_envir on four_fenv=id_four where desa_four='N' and ( envi_fenv='CA' or envi_fenv='DE' ) ) T2 order by code_four) and desa_four='N' and ( envi_fenv='CA' or envi_fenv='DE' ) ) T_RESULTAT order by code_four

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

Discussions similaires

  1. Faire un distinct count suite à plusieurs group by
    Par kevinze1 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 15/09/2008, 13h23
  2. Réponses: 3
    Dernier message: 11/07/2008, 18h18
  3. Réponses: 0
    Dernier message: 01/07/2008, 14h32
  4. ou placer DISTINCT ?
    Par seb92 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 02/12/2004, 11h00
  5. Pb BDE suite a passage en Windows 2000 pro
    Par ARIF dans le forum Paradox
    Réponses: 4
    Dernier message: 18/11/2002, 11h39

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