Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Débuter
Débuter Forum d'entraide pour débuter avec MySQL
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 19/07/2011, 09h45   #1
Invité de passage
 
Homme Loïc S.
Administrateur systèmes et réseaux
Inscription : juillet 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Loïc S.
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Administrateur systèmes et réseaux
Secteur : Santé

Informations forums :
Inscription : juillet 2011
Messages : 3
Points : 1
Points : 1
Par défaut Recherche dans mon espace membre [SQL]

Bonjour,

Je débute en SQL et je fais donc appel a vos connaissances. J'ai créé un espace membre avec plusieurs tables dont : users, pictures, cities.

J'aimerai maintenant combiner plusieurs requêtes afin de créer un tableau avec des informations sur chaque utilisateurs.

- La table users contient les colonnes : id, pseudo, mdp, ddn, city, active, lastactivity
- La table pictures contient les colonnes : id, id_user, path, timestamp
- La table cities contient : id et ville

Je voudrais afficher maintenant dans un unique tableau les valeurs users.id, users.pseudo, *AGE*, *VILLE*, users.active, users.lastactivity, *NOMBREDEPHOTOS*

Donc AGE proviendrait de users.ddn qui est au format date (1990-10-08)
VILLE serait une correspondance entre users.city et cities.id qui renverrait cities.ville
NOMBREDEPHOTOS serait un count du nombre de photos par utilisateur donc un lien entre pictures.id_user et users.id

Pour le moment je patauge.. J'ai réussi a effectuer le count de photos mais le tableau se répète autant de fois qu'il y a de photos et non autant de fois que d'utilisateurs...

Ma requête actuelle ressemble à :
Code :
1
2
3
4
5
6
7
8
9
10
SELECT 
users.id, 
users.pseudo,
users.ddn,
users.city,
users.active,
users.lastactivity,
(SELECT DISTINCT COUNT(*) AS nbpics FROM pictures WHERE pictures.id_user = users.id GROUP BY pictures.id_user)
FROM users, pictures
WHERE 1
Je vous remercie d'avance pour votre aide.
BuXx57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 16h24   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 020
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 020
Points : 18 305
Points : 18 305
Envoyer un message via MSN à CinePhil
Commençons par chercher combien il y a de photos par utilisateur :
Code :
1
2
3
4
SELECT u.id, COUNT(p.*) AS nb_photos
FROM users u
INNER JOIN pictures p ON p.id_user = u.id
GROUP BY id
Récupérons ensuite les autres informations de chaque utilisateur :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT u1.id, u1.pseudo, 
    ABS(CAST(CURRENT_TIMESTAMP - u.ddn AS FLOAT) / 365.2425) AS Age,
    c.ville,
    u1.active, u1.lastactivity,
    tmp.nb_photos
FROM users u1
INNER JOIN
(
    SELECT u.id, COUNT(p.*) AS nb_photos
    FROM users u
    INNER JOIN pictures p ON p.id_user = u.id
    GROUP BY id
) AS tmp ON tmp.id = u1.id
INNER JOIN cities c ON c.id = u1.city
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h21.


 
 
 
 
Partenaires

Hébergement Web