Pb en Mysql [Résolu]
Forum Programmation : Pb en Mysql [Résolu]
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
group by non?
j'ai mis "GROUP BY" à la place de "ORDER BY" mais tjrs la même erreur
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
Répondre à MoOx_t
malheureusement , j'ai tjrs la même erreur
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
Répondre à MoOx_t
Désolée de te décevoir mais même en corrigeant la faute, tjrs la même erreur
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 ?
MySQL 4.0.15
pr l'instant c la seule requête imbriquée
bah cherche pas plus loin, les sous requete ne sont supportées qu'a partir de la 4.1.
Ok merci bcp, mais comment pourrais je détourner le pb?
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.
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 :
|
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
tu utilises un langage de programmation pour attaquer ta base, non?
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
pour récupérer l'id, il te faut utiliser le php, pour tester, tu indiques user_id à la main ![]()
Message édité par coca25 le 17-08-2007 à 15:12:47
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
Code :
|
à toi de gérer les erreurs
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
je vais faire une pause et revenir après
oui .... mais non, faut pas faire n'importe quoi aussi!!!!
| Citation :
|
ca c'est du n'importe quoi...
Message édité par coca25 le 17-08-2007 à 15:58:50
Penser à voir les tutos, ca peut aider!
Répondre à coca25
rah.. prenez l'habitude de mettre un or die(mysql_error()); apres le query...
Faire un mysql_query d'un résultat de mysql_query, c'est moche
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.
t'as mis le or die ?? histoire de debugger ta requete...
je me concentre pour voir les erreurs
non je les vois pas
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
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
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.
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
Code :
|
Message édité par coca25 le 17-08-2007 à 16:29:41
Penser à voir les tutos, ca peut aider!
Répondre à coca25
je continue de chercher et tester tout ce que vous me dîtes
salut
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.
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.
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
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...
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
des fois, je me demande si tu comprends ce que tu écris ![]()
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
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.
je ne peux pas faire des Select imbriquées*
@salistase : je ne pense pas qu'il se moquait...
Sinon, si tu veux éditer un message, clique sur
Ensuite, fais voir le code que tu as mis sur ta page.
Répondre à OmaR
voici le lien pour ma page php :
http://docs.google.com/Doc?docid=d [...] h5j6&hl=fr
j'ai trouvé l'erreur
ç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.
Merci à tous de m'avoir aidé.
EDIT: j'avais pas vu la 2eme page
Message édité par coca25 le 20-08-2007 à 14:00:29
Penser à voir les tutos, ca peut aider!
Répondre à coca25
Il y a 2709 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

okinou