Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/09/2011, 12h41   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 30
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 30
Points : 12
Points : 12
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
scrappilly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 13h22   #2
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 446
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 446
Points : 7 543
Points : 7 543
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
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 13h47   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 13h53   #4
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 30
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 30
Points : 12
Points : 12
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 :
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
scrappilly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 14h00   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Tu dois pouvoir faire un truc de ce genre, en vrai SQL :
Code :
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 14h09   #6
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 30
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 30
Points : 12
Points : 12
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
scrappilly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 14h12   #7
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 14h27   #8
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 30
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 30
Points : 12
Points : 12
à priori on peut, mais j'ai pas encore réussi à faire.
Ta requête marche très bien sous phpmyadmin
scrappilly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 15h13   #9
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 30
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 30
Points : 12
Points : 12
Par défaut je progresse

Code :
USE Doctrine\ORM\Query\ResultSetMapping;
Code :
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
scrappilly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 15h19   #10
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 30
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 30
Points : 12
Points : 12
Par défaut modif du code précédent

J'ai oublié 2 lignes, ça marche mieux comme ça.
Code :
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
scrappilly est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h50.


 
 
 
 
Partenaires

Hébergement Web