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 :

Tri des données provenant d'une requête mysql


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 30
    Points : 22
    Points
    22
    Par défaut Tri des données provenant d'une requête mysql
    Bonjour,

    J'ai une table photo avec un id, nom, descriptif, ... et qui est liée à une table thème.
    Mon soucis c'est que je voudrais récupérer toutes les photos correspondant à un thème donné et que la première photo du jeu de résultat correspond à un id donné.
    Autrement dit, quand je clique sur une photo, l'id de la photo est transmis à une fonction qui permet de récupérer le thème associé et les photos correspondant à ce thème, mais je n'arrive pas à faire en sorte que le premier objet récupéré correspond à mon id transmis.
    Order by ne vas pas car je ne peux pas trier sur un numéro d'un champ.
    J'arrive juste à récupérer l'ensemble des photos correspondant à ce thème.

    Une idée ?
    Je tiens à préciser que je développe actuellement sous symfony2 - doctrine2, j'avais trouvé une solution avec mysql et order by field (champ, valeur) desc mais cela ne marche pas sous doctrine2, grrrrrrrrrrrrrrr

  2. #2
    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 789
    Points
    30 789
    Par défaut
    Pourrais-tu nous présenter la structure des tables, un jeu d'essai, la requête que tu exécutes, ce que tu obtiens, ce que tu attends... ?
    En fait, ce qui est demandé dans les Règles du forum Langage SQL à lire par tous.
    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.

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par scrappilly Voir le message
    Je tiens à préciser que je développe actuellement sous symfony2 - doctrine2, j'avais trouvé une solution avec mysql et order by field (champ, valeur) desc mais cela ne marche pas sous doctrine2, grrrrrrrrrrrrrrr
    Laisse tomber ce foutu ORM !

    Si vraiment tu ne peux pas t'en passer, tu peux apparemment écrire des vraies requêtes en vrai SQL et les faire exécuter par Doctrine. La méthode est expliquée ici.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Ma table photo comme je le disais contient un id, nom, descriptif et une clé sur la table theme (id, libellé).

    Je cherche à faire une requête avec doctrine2 pour afficher toutes les photos correspondant à un thème donné et dont le résultat commence par une photo x.

    Le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT p FROM FredFocalementVotreBundle:Photo p JOIN p.theme t WHERE t.id = :theme
    Mais ici j'obtiens toutes les photos de ce thème, ce que je cherche à faire c'est par exemple que le résultat me renvoie en premier la photo dont l'id est 84 par exemple, je ne peux donc pas trier par [codeniline]Order By p.id ASC[/codeinline] car soit il me le fait de façon descendant ou ascendant, alors que je cherche à avoir en premier une photo qui peut se situer au milieu de la liste

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Tu dois pouvoir faire un truc de ce genre, en vrai SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT -- les colonnes nécessaires
    FROM Photo p
    INNER JOIN theme t ON t.id = p.id_theme
    ORDER BY
        CASE
            WHEN p.id = 12 THEN 1
            ELSE 2
        END,
        p.id
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 30
    Points : 22
    Points
    22
    Par défaut le lien est pour doctrine1.2
    Sous symfony2, c'est doctrine2 qui est utilisé et donc cela ne marche pas et la doc est peu explicite là dessus, merci quand même

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par scrappilly Voir le message
    Sous symfony2, c'est doctrine2 qui est utilisé et donc cela ne marche pas et la doc est peu explicite là dessus, merci quand même
    Si on ne peut pas soumettre de vraies requêtes SQL avec Doctrine, je n'utiliserai jamais Doctrine !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    à priori on peut, mais j'ai pas encore réussi à faire.
    Ta requête marche très bien sous phpmyadmin

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 30
    Points : 22
    Points
    22
    Par défaut je progresse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    use Doctrine\ORM\Query\ResultSetMapping;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $rsm = new ResultSetMapping;
    $rsm->addEntityResult('FredFocalementVotreBundle:Photo', 'p');
    $sql = 'SELECT * FROM photo WHERE theme_id = ? ORDER BY CASE WHEN id = ? THEN 1 ELSE 2 END, id';
    $query = $this->_em->createNativeQuery($sql, $rsm);
    $query->setParameter(1, $theme);
    $query->setParameter(2, $id);
     
    $photos = $query->getResult();
    return $photos;
    Le problème c'est que je n'ai plus de résultats alors que j'ai 3 photos qui correspondent

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 30
    Points : 22
    Points
    22
    Par défaut modif du code précédent
    J'ai oublié 2 lignes, ça marche mieux comme ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $rsm = new ResultSetMapping;
    $rsm->addEntityResult('FredFocalementVotreBundle:Photo', 'p');
    $rsm->addFieldResult('p', 'id', 'id');
    $rsm->addFieldResult('p', 'nom', 'nom');
     
    $sql = 'SELECT id, nom FROM photo WHERE theme_id = ? ORDER BY CASE WHEN id = ? THEN 1 ELSE 2 END, id';
     
    $query = $this->_em->createNativeQuery($sql, $rsm);
    $query->setParameter(1, $theme);
    $query->setParameter(2, $id);
     
    $photos = $query->getResult();
    return $photos;
    Merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/03/2015, 16h51
  2. Réponses: 5
    Dernier message: 06/02/2008, 16h01
  3. Réponses: 2
    Dernier message: 14/05/2007, 09h40
  4. [FPDF] Mettre des données issues d'une requête dans l'entête
    Par zoom61 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 30/03/2007, 10h10
  5. [MySQL] Insérer des données à partir d'une db mysql dans un textarea
    Par minogttao dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/11/2006, 21h59

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