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 :

MYSQL => requête imbriquée = problème


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 5
    Points : 4
    Points
    4
    Par défaut MYSQL => requête imbriquée = problème
    Bonjour !

    Je suis en train de developper un site .. et, en local, j'ai une classe qui contient une requête, qui marche bien ( LAMP, php 5 mysql4.1)

    J'ai un hébergement OVH, et la même classe, avec la même requête ne renvoei rien ...
    après quelques tatonements (1/2 journée), je me suis aperçu que, en mettant "LIMIT 0, 30# à la fin de ma requête, ça marche chez OVH !

    Hors, j'ai besoin du tableau complet .. ( 105 lignes en moyennes ) ..

    Je pourrais le faire en plusieurs requêtes, avec des boucle foreach dans mon code php, mais globalement, c'est plus long en traitement .. ( la différence est nette en local)

    Voila ma requête "qui marche" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT `U`.`id`, `U`.`nom`, `U`.`prenom`, `U`.`login`, `U`.`droits`, `U`.`nom_ets`, `U`.`quota`, 
      (SELECT COUNT( * )FROM `connexion` C 
      WHERE `U`.`id` =`C`.`id_utilisateur`) AS `nb_cnx` ,
     (SELECT MAX( `date_connexion` ) FROM `connexion` C
    WHERE `U`.`id` = `C`.`id_utilisateur`) AS `derniere_cnx` ,
     (SELECT `C`.`adresse_ip` FROM `connexion` C
    WHERE `U`.`id` = `C`.`id_utilisateur`
    AND `date_connexion` = `derniere_cnx`) AS `derniere_ip` , 
     (SELECT COUNT( * ) FROM `registres` R
    WHERE `U`.`id` = `R`.`id_user`) AS `nb_registre`
     
    FROM `utilisateurs` U
    ORDER BY `derniere_cnx` DESC
    LIMIT 0 , 30
    Si j'enlève le LIMIT 0, 30, ça marche en local, ça marche avec phpmyadmin chez OVH, mais pas dans ma classe ...

    Y a-t-il une alternative ? une autre écriture de requête ?

    J'ai essayé avec des JOIN, mais les count retourne de valeurs fausses

    HELP !!

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Citation Envoyé par ambigua Voir le message
    J'ai essayé avec des JOIN, mais les count retourne de valeurs fausses

    Logiquement ca ne devrait pas.

    Que donne ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT U.id, U.nom, U.prenom, U.login, U.droits, U.nom_ets, U.quota, c.nb_cnx, c.derniere_cnx, r.nb_registre, c2.adresse_ip
    FROM utilisateurs U
    left outer join (
    	select id_utilisateur, MAX(date_connexion) as derniere_cnx, count(*) as nb_cnx
    	from connexion
    	group by id_utilisateur) as c on u.id = c.id_utilisateur
    left outer join connexion c2 on c.id_utilisateur = c2.id_utilisateur and c.derniere_cnx = c2.date_connexion
    left outer join (
    	select id_user, count(*) as nb_registre
    	from registres
    	group by id_user) as r on r.id_user = u.id
    ORDER BY derniere_cnx DESC

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Salut !

    MERCI !

    Ta requete (après quelques corrections de syntax des u en U ) fonctionne !!
    même chez OVH :p


    La correction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT `U`.`id`, `U`.`nom`, `U`.`prenom`, `U`.`login`, `U`.`droits`, `U`.`nom_ets`, `U`.`quota`, `c`.`nb_cnx`, `c`.`derniere_cnx`, `r`.`nb_registre`, `c2`.`adresse_ip`
    								FROM `utilisateurs` U
    								LEFT OUTER JOIN (SELECT `id_utilisateur`, MAX(`date_connexion`) AS derniere_cnx, count(*) AS nb_cnx
    									FROM `connexion`
    									GROUP BY `id_utilisateur`) AS c ON `U`.`id` = `c`.`id_utilisateur`
    								LEFT OUTER JOIN `connexion` c2 ON `c`.`id_utilisateur` = `c2`.`id_utilisateur` AND `c`.`derniere_cnx` = `c2`.`date_connexion`
    								LEFT OUTER JOIN (
    									SELECT `id_user`, count(*) AS nb_registre
    									FROM `registres`
    									GROUP BY `id_user`) AS r ON `r`.`id_user` = `U`.`id`
    								ORDER BY derniere_cnx DESC

Discussions similaires

  1. [MySQL] Problème de requête imbriquée (mysql) & php
    Par niacinside dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/05/2008, 10h59
  2. [mysql et php] requêtes imbriquées
    Par php_de_travers dans le forum Requêtes
    Réponses: 7
    Dernier message: 13/04/2006, 22h46
  3. [MySQL] Requetes imbriquées, problème de groupage
    Par cdelamarre dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/02/2006, 21h16
  4. [MySQL] Erreur SQL 1064 : Requête imbriquée avec jointure !
    Par patchankito dans le forum Langage SQL
    Réponses: 5
    Dernier message: 31/01/2006, 10h37
  5. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29

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