Tom's Guide > Forum > Programmation > Pb en Mysql [Résolu]

Pb en Mysql [Résolu]

Forum Programmation : Pb en Mysql [Résolu]

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonjour tout le monde,
voilà j'ai un pb de syntaxe dans une requête sql et je vois pas l'erreur, si qqn peut m'aider SVP, merci à Tous.

la requête :

SELECT *
FROM utilisateur u, structure s, profil p
WHERE id_user = (
SELECT MAX( id_user )
FROM utilisateur
ORDER BY id_user DESC ) AND s.id_structure = u.id_struct AND p.id_profil = u.id_profil


l'erreur :

#1064 - Erreur de syntaxe près de 'SELECT MAX( id_user )
FROM utilisateur
ORDER BY id_user DESC ' à la ligne 4


Message édité par salistase le 20-08-2007 à 14:10:35
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

j'ai mis "GROUP BY" à la place de "ORDER BY" mais tjrs la même erreur

Répondre à salistase

Rajoute un alias pour la sous requête dans le style

SELECT *
FROM utilisateur u, structure s, profil p
WHERE id_user = (
SELECT MAX( u2.id_user )
FROM utilisateur u2
ORDER BY id_user DESC ) AND s.id_structure = u.id_struct AND p.id_profil = u.id_profil


Message édité par MoOx_t le 17-08-2007 à 14:14:42
------------------------------ Programmeur n.m : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.
Répondre à MoOx_t

malheureusement , j'ai tjrs la même erreur :??:

Répondre à salistase

lol c'est normal...
T'as oublié un u.

SELECT *
FROM utilisateur u, structure s, profil p
WHERE u.id_user = (
SELECT MAX( id_user )
FROM utilisateur
ORDER BY id_user DESC ) AND s.id_structure = u.id_struct AND p.id_profil = u.id_profil

------------------------------ Programmeur n.m : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.
Répondre à MoOx_t

Désolée de te décevoir mais même en corrigeant la faute, tjrs la même erreur

Répondre à salistase

heu juste une question... t'as quelle version de MySQL ? parce qu'a l'epoque ou j'en faisait, on ne pouvait pas faire de requete imbriqué...

tu as d'autres requetes imbriquées qui fonctionnent ou c'est la seule ?

Répondre à kakashi99

MySQL 4.0.15
pr l'instant c la seule requête imbriquée

Répondre à salistase

bah cherche pas plus loin, les sous requete ne sont supportées qu'a partir de la 4.1.

Répondre à kakashi99

Ok merci bcp, mais comment pourrais je détourner le pb?

Répondre à salistase

bah ta requete imbriquée, tu l'execute avant, et dans la deuxieme dans le WHERE u.id_user = ... tu mets le resultat de la premiere.

ca te fait faire 2 requetes au lieu d'une mais bon, tu peux pas faire autrement, sauf si tu peux changer de version.

Répondre à kakashi99

salut,
si il existe forcément des enregistrements dans structure et profile pour tous les utilisateurs et qu'il n'y a qu'un enregistrement par utilisateur, tu peux utiliser ceci:

Code :
  1. SELECT  * 
  2. FROM utilisateur u, structure s, profil p 
  3. WHERE s.id_structure = u.id_struct AND p.id_profil = u.id_profil
  4. order by u.id_user desc limit 1

------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

Pour coca25 malheureusement, il ya 2/3 enregistrements pour certains utilisteurs, dc je ne pourrais utiliser ta solution, merci.
Sinon, j'ai fait comme a été proposé par kakashi99 mais ça marche tjrs pas.
la reqête que j'ai testée est la suivante:

id_user0 = ( SELECT max( id_user )
FROM utilisateur
ORDER BY id_user DESC )
SELECT *
FROM utilisateur u, structure s, profil p
WHERE id_user = id_user0 AND s.id_structure = u.id_struct AND p.id_profil = u.id_profil


j'ai essayé de tester juste la première requête(le premier select) où ça pose pb et ça marche tjrs pas

Répondre à salistase

tu utilises un langage de programmation pour attaquer ta base, non?

------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

en fait cette partie de code je l'intègre normalement ds une page php mais pour l'instant je la teste directement sur ma base avant de la mettre ds ma page.
je suis en localhost, j'utilise phpMyAdmin 2.5.3

Répondre à salistase

pour récupérer l'id, il te faut utiliser le php, pour tester, tu indiques user_id à la main :p


Message édité par coca25 le 17-08-2007 à 15:12:47
------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

en fait ce qui se passe c que qd je teste avec un nombre précis pour id_user (ex: id_user='52') ma requête marche bien mais qd je teste avec le MAX, ça marche pas.
et moi j'ai besoin de récupérer le plus grd id_user car il me permettera de connaitre le dernier utilisateur enregistré.
j'espère avoir été assez claire

Répondre à salistase

Code :
  1. $res = mysql_query ("SELECT max( id_user )  FROM utilisateur" );
  2. $user_id = mysql_result ($res, 0, 0);
  3. mysql_free_result ($res);
  4. $res = mysql_query ("SELECT  * 
  5. FROM utilisateur u, structure s, profil p
  6. WHERE id_user = $user_id AND s.id_structure = u.id_struct AND p.id_profil = u.id_profil " );
  7. // ...



à toi de gérer les erreurs :p

------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

Bon j'ai testé ce que tu m'as dit mais ça marche pas, ça m'affiche des erreurs ds ma page php :

Warning: mysql_numrows(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-7\www\essai php\nouvorangempm.php on line 39
L'utilisateur suivant a bien été créé :
Nom :
Notice: Undefined variable: nom in c:\program files\easyphp1-7\www\essai php\nouvorangempm.php on line 58

Prénom :
Notice: Undefined variable: prenom in c:\program files\easyphp1-7\www\essai php\nouvorangempm.php on line 62

Login :
Notice: Undefined variable: login in c:\program files\easyphp1-7\www\essai php\nouvorangempm.php on line 66

Mot de passe :
Notice: Undefined variable: pass in c:\program files\easyphp1-7\www\essai php\nouvorangempm.php on line 70

Profil :
Notice: Undefined variable: profil in c:\program files\easyphp1-7\www\essai php\nouvorangempm.php on line 74

Division :
Notice: Undefined variable: division in c:\program files\easyphp1-7\www\essai php\nouvorangempm.php on line 78


je vous donne le lien pour ma page php
http://docs.google.com/Doc?docid=dg7mnf2d_17fch5j6&hl=fr

je suis au bout du rouleau :pt1cable: je vais faire une pause et revenir après

Répondre à salistase

oui .... mais non, faut pas faire n'importe quoi aussi!!!!

Citation :


$res = mysql_query ("SELECT *
FROM utilisateur u, structure s, profil p WHERE id_user = $user_id AND s.id_structure = u.id_struct AND p.id_profil = u.id_profil " );
$resultat=mysql_query($res);
$nb = mysql_numrows($resultat);


ca c'est du n'importe quoi...


Message édité par coca25 le 17-08-2007 à 15:58:50
------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

rah.. prenez l'habitude de mettre un or die(mysql_error()); apres le query...

Répondre à kakashi99

Faire un mysql_query d'un résultat de mysql_query, c'est moche :D

------------------------------ Les dessins des seins ou les desseins des saints ?
Répondre à OmaR

lol
c vrai que c du n'importe koi, mais ça fait 2h que j'essaie de règler ce pb et à force de faire des copier-coller, je ne sais plus où j'en suis.
bref, voilà je pense avoir corrigé mes fautes ENORMES mais j'ai encore des erruers
j'ai modifié le code dans ma page php que j'ai mise en lien.

Répondre à salistase

t'as mis le or die ?? histoire de debugger ta requete...

Répondre à kakashi99

je me concentre pour voir les erreurs :pt1cable: non je les vois pas :whistle:

------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

en meme temps elle dit qu'elle a toujours des erreurs, mais elle ne nous les donne pas. ensuite tu connais la structure de sa table ?? qui te dit que la table utilisateur c'est pas utiisateurs ?? une faute de frappe, on pense pas a ca, et on reste bloqué pendant un moment.

quand on debugge on le fait bien. le or die sur le query montrera que la requete est bonne...


Message édité par kakashi99 le 17-08-2007 à 16:25:30
Répondre à kakashi99

Oui, j'ai mis comme tu m'as dit le " or die(mysql_error()); " mais ça ne me renvoie rien, j'ai tjrs les même erreurs que celles mentionnées avant à part le warning

Répondre à salistase

1-je suis une fille
2-les erreurs, je les ai données en haut en bleu.
3-ma table s'intitule bien UTILISATEUR
4-la requête or die(mysql_error()); ne renvoie rien.

Répondre à salistase

dans ton select, evite de mettre SELECT *, mais seulement les champs que tu veux recuperer.

ca evite des erreurs, et c'est plus propre.

je pense que ca vient du fait que tes variables sont crées dans un while... il faudrait qu'elles soient crées avant le while et instancié dans le while.

Citation :

je suis une fille


corrigé ! ;)

Citation :

ma table s'intitule bien UTILISATEUR


c'etait un exemple ^^


Message édité par kakashi99 le 17-08-2007 à 16:26:16
Répondre à kakashi99

Code :
  1. $sql = mysql_query ("SELECT max( id_user )  FROM utilisateur" ) or die (mysql_error ());
  2.     $user_id = mysql_result ($sql, 0, 0);
  3. $res = mysql_query ("SELECT  *
  4.       FROM utilisateur u, structure s, profil p WHERE id_user = $user_id AND s.id_structure = u.id_struct AND p.id_profil = u.id_profil " ) or die ("user_id: $user_id --- " . mysql_error ());


Message édité par coca25 le 17-08-2007 à 16:29:41
------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

je continue de chercher et tester tout ce que vous me dîtes

Répondre à salistase

salut :hello:
j'espère que vous avez passé un bon WE.
voilà j'ai rajouté la ligne de code suivante avant le WHILE :
global $nom, $prenom, $login, $pass, $profil, $division;


il est vrai que je n'ai plus d'erreur sur ma page mais je ne récupère pas les données que je veux de ma base.

Répondre à salistase

que donne le "or die ()"
la ligne global n'était pas nécessaire, il suffisait de les instancier avant le while, ou tous simplement ne pas afficher les ligne du tableau si la requete échoue.

------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

justement rien, il ne me renvoie rien du tout et en même temps j'ai pas mes données qui s'affichent

Répondre à salistase

et que te sort la premiere requete? un user_id valide?
teste les 2 requetes directement sur le client mysql pour voir ce que ca donne...

------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

la première requête marche bien , elle me renvoie le nbre 117 qui correspond au id_user max

mais qd je teste la deuxième requête en utilisant le résultat de la précédente ça me renvoie une erreur.

voici la requête que j'ai testée diretement sur le client Mysql

SELECT max( id_user ) AS user_id
FROM utilisateur
SELECT nom, prenom, login, pass, id_profil, label
FROM utilisateur u, structure s, profil p
WHERE id_user = user_id AND s.id_structure = u.id_struct AND p.id_profil = u.id_profil


#1064 - Erreur de syntaxe

Répondre à salistase

des fois, je me demande si tu comprends ce que tu écris :p

 

1. tu prends l'id du dernier utilisateur sauvé dans la base (ex: 117)
2. maintenant, vu que tu as le nombre 117, tu veux des infos sur cet utilisateur, alors pourquoi le "WHERE id_user = user_id"???

 

et 2 select dans une requete, ca ne rime à rien:
"SELECT max( id_user ) AS user_id
FROM utilisateur
SELECT nom, prenom, login, pass, id_profil, label "

 



Message édité par coca25 le 20-08-2007 à 12:48:45
------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

1- c'est pas la peine de se moquer
2-je ne peux pas faire des Select car j'ai pas la bonne version de Mysql,
je dois donc récupérer l'id_user de mon dernier utilisateur enregistré, j'utilise ce résultat dans ma deuxième reqûete car je n'obtients pas toutes les infos necessaires dans la table utilisateur.
il est clair que qd je teste avec id_user=117 (le nombre 117) ds la deuxième requête ça marche mais c un cas précis et moi je veux généraliser, parceque à chaque fois j'ai un nouveau utilisateur qui s'inscrit.
je ne sais pas si j'ai été claire.

Répondre à salistase

je ne peux pas faire des Select imbriquées*

Répondre à salistase

@salistase : je ne pense pas qu'il se moquait...

Sinon, si tu veux éditer un message, clique sur http://img.infos-du-net.com/forum/themes_static/images_forum/3/edit-in.gif

Ensuite, fais voir le code que tu as mis sur ta page.

------------------------------ Les dessins des seins ou les desseins des saints ?
Répondre à OmaR

j'ai trouvé l'erreur :bounce:
ça vient de ma BDD, je faisais des tests sur mon dernier utilisateur enregistré alors que ce dernier n'avait pas bien rentré les données concernant son profil.
Désolée Coca25 si j'ai été un peu méchante mais c just que je suis un peu susceptible. :D

Merci à tous de m'avoir aidé.

Répondre à salistase

EDIT: j'avais pas vu la 2eme page


Message édité par coca25 le 20-08-2007 à 14:00:29
------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25
Tom's Guide > Forum > Programmation > Pb en Mysql [Résolu]
Aller à :

Il y a 2709 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens