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

Langage SQL Discussion :

Trier Une requête de deux facon


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 190
    Points : 80
    Points
    80
    Par défaut Trier Une requête de deux facon
    Bonsoir,

    j'ai deux tables, une table qui s'appelle (photo_voiture)
    et une table qui s'appelle (annonce_voiture).

    Elles sont groupées, je voulais faire apparaitre une seule photos sur 4 qui se trouvent dans la table photo_voiture, c'est fait, ça fonctionne, mais...

    Mon problème: j'aimerais maintenant obtenir un résultat trié sur le champs 'photo1' qui se trouve dans la table (photo_voiture). car pour le moment il n'y a pas d'ordre et donc y a effectivement une photo qui s'affiche sur les 4 mais on ne peut pas la choisir

    voici donc ma requête qui fonctionne pour le moment:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     SELECT *
    FROM annonce_voiture, photo_voiture
    WHERE annonce_voiture.id = photo_voiture.idannonces
    GROUP BY photo_voiture.idannonces
    ORDER BY lastupdate DESC
    LIMIT 0 , 5

    en fait, j'aimerais ajouter un ORDER BY photo1 DESC , mais ça ne fonctionne pas car y a déja un "ORDER BY "...

  2. #2
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    vous pouvez cumuler les champs dans le ORDER BY :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ORDER BY lastupdate , photo1
    Bon courage
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 190
    Points : 80
    Points
    80
    Par défaut
    j'avais déja essayé de faire comme ça,
    mais ça change tout l'ordre de mes annonces.

    elle ne sont plus classées par lastupdate... donc ça ne va pas


    la seules choses que je souhaite, c'est que ce soit la derniere miniature classées par ordre alphabétique qui s'affiche (elles ont un nom numéroté toutes) .


    je me demande si faire deux requêtes au lieu d'une grande ne serait pas la solution, mais ça bouffe plus de ressources non?

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 774
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 774
    Points : 52 743
    Points
    52 743
    Billets dans le blog
    5
    Par défaut
    La solution normative en SQL à l'aide des fonctions de fenêtrage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT *
    FROM   annonce_voiture AS AV
           INNER JOIN (SELECT photo_voiture, idannonces, RANK() OVER (PARTITION BY idannonces ORDER BY nomphoto DESC) AS RANG
                       FROM photo_voiture) AS T
                 ON AV.id = T.idannonces
    WHERE RANG + 1
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 190
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par SQLpro
    La solution normative en SQL à l'aide des fonctions de fenêtrage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT *
    FROM   annonce_voiture AS AV
           INNER JOIN (SELECT photo_voiture, idannonces, RANK() OVER (PARTITION BY idannonces ORDER BY nomphoto DESC) AS RANG
                       FROM photo_voiture) AS T
                 ON AV.id = T.idannonces
    WHERE RANG + 1
    A +

    je viens d'essayer ton code voici la réponse que j'ai de mysql

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     MySQL a répondu:Documentation
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '( PARTITION BY idannonces ORDER BY photo1 DESC ) AS RANG FROM photo_voiture ) AS' at line 1
    photo1 = nomphoto

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 804
    Points
    30 804
    Par défaut
    Dommage, MySQL ne reconnait pas les fonctions de regroupement analytique de SQL-99
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 190
    Points : 80
    Points
    80
    Par défaut
    je suis bien avec tout ça...

    a mon avis en plus le code était bon....
    personne a la traduction en mysql lol?

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 804
    Points
    30 804
    Par défaut
    Pour pouvoir proposer une autre solution, il nous faudrait des renseignements supplémentaires, tels que la structure des tables, le critère de sélection de LA photo à retenir, ...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 190
    Points : 80
    Points
    80
    Par défaut
    y a une table annonce_voiture avec un champs id en auto_incrément
    une table photo_voiture avec un champs (id, idannonces, photo1)

    idannonces = id du champs annonce_voiture
    photo1 = le nom de la photo


    et le nom des photos commence par un timestamp, j'aimerai récupérer la dernière ajoutée.

  10. #10
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 804
    Points
    30 804
    Par défaut
    En SQL, on ne parle pas de champs mais de colonnes...

    En cherchant un peu dans les discussions précedentes, tu aurais trouvé plusieurs problèmes résolus équivalents au tien.

    La structure de la requête dans ton cas serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT  a.*
        ,   p.*
    FROM    annonces    AS a
        INNER JOIN
            photos  AS p
            ON  a.id_annonce = p.id_annonce
    WHERE   EXISTS
            (   SELECT  1
                FROM    photos AS s
                WHERE   p.id_annonce = s.id_annonce
                HAVING  p.timestamp_photo = MAX(s.timestamp_photo)  
            )
    ;
    Ensuite, tu peux utiliser toutes les colonnes que tu veux dans la clause ORDER BY.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 190
    Points : 80
    Points
    80
    Par défaut
    la je pige plus rien, c'est du chinoix total ...

    jvais aller essayer de lire le tutos du site pour essayer de déchiffrer

    car notament le .s je vois pas d'ou il viens ...

    merci quand meme d'avoir essayer de m'aider

  12. #12
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 804
    Points
    30 804
    Par défaut
    En effet, désolé, une faute de frappe. C'est corrigé.
    Citation Envoyé par starr
    jvais aller essayer de lire le tutos du site pour essayer de déchiffrer
    J'aurais pensé que c'était par là que tu avais commencé... avant de poser ta question
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 190
    Points : 80
    Points
    80
    Par défaut
    mon code de base lui fonctionnait,
    je pensais pas qu'il fallait rajouter tant de choses juste pour avoir le tri d'une "colone" en plus .


    bonne journée

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

Discussions similaires

  1. [Access] Fonction TOP dans une requête sur deux tables
    Par pc75 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/07/2007, 09h31
  2. Trier Une requête de deux facons
    Par starr dans le forum Requêtes
    Réponses: 1
    Dernier message: 19/06/2007, 12h19
  3. Réponses: 2
    Dernier message: 31/05/2007, 15h58
  4. [PostGreSQL] Trier une liste ayant deux requêtes comme source
    Par Mat_DZ dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 09/08/2006, 10h51
  5. [MySQL] Faire une requête recourant à deux bases de données
    Par bourvil dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 02/04/2006, 15h35

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