req sql Max(id) + GROUP/[RESOLU] - SQL/NoSQL - Programmation
Marsh Posté le 28-09-2007 à 14:08:49
l'oubli de parenthèse avant de fermer ta chaîne est une erreur de copier-coller ?
Code :
|
Code :
|
Marsh Posté le 28-09-2007 à 14:09:19
où est l'intéret de mettre un order by vu que tu fais un in avant ?
il me semble aussi que ca serait mieux si tu mets ton Max(id) as id aussi
Marsh Posté le 28-09-2007 à 14:25:43
j'ai modifié Max(id) as id et la ) mais toujours la même erreur
Merci d'avance
Marsh Posté le 28-09-2007 à 15:01:17
voila le msg d erreur : You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT MAX(id) as idmax FROM suivi_aeronef GROUP BY nmr, nbrnmr
Marsh Posté le 28-09-2007 à 16:14:31
bon un ami du nom de Bab qui ma beaucoup aidé a trouvé cela :
SELECT MAX(b.id), b.nmr,b.nbrnmr, b.lettre
FROM aeronef AS a, suivi_aeronef AS b
WHERE a.nmr = b.nmr
AND a.nbrnmr = b.nbrnmr
AND a.lettre = b.lettre
AND a.valide != "2"
GROUP BY b.nmr, b.nbrnmr, b.lettre
cela fonctione mais pas completement :
j ai bien 1 enregistrement par group
mais j ai pas l enregistrement avec le plus grand id il ne me prend pas en compt la fonction MAX(b.id)
voila si vous avez une idée qui peut m aidé je vous ecoute merci
Marsh Posté le 01-10-2007 à 10:31:46
hello je fait un edit puisque le poste ne sert a rien
Code :
|
voila j ai cette requette elle fonctione.
mais le champ "nbrvoleff" doit affiché des donné et celle si ne sont pas les bonne il me sort les donné d un autre id que l id max.
exmple :
id | nbrvoleff | nmr | numeronmr | lettrenmr
1 | 20 | truc | 001 | A
2 | 30 | truc | 001 | A dans ce group le max id sort bien 3 mai me donne 20 pour nbrvoleff alors
3 | 40 | truc | 001 | A que c'est 40 sur la igne 3
4 | 88 | blop | 002 | B
5 | 99 | blop | 002 | B
help plz merci d'avance.
Marsh Posté le 02-10-2007 à 11:27:53
Déjà, deux trucs :
1/ Poste tes requêtes sans le code PHP autour, car c'est pas clair à lire
2/ C'est d'autant plus important que si le bug vient de ton script PHP c'est plus facile à détecter quand on débug le SQL seul
Sinon, c'est normal, tu dois passer par une sous-requête pour déterminer le max. Les fonctions d'agrégation ne permettent pas de faire un regroupement sur un champ et en même temps retourner des infos correspondant à la valeur retournée par la fonction d'agrégat
Marsh Posté le 02-10-2007 à 12:03:35
Merci MagicBuzz
visiblement cela ne marche pas :S
je n'est jamais vue de sous requet je cherche sur internet en attente de quelques conseils merci par avance.
petit test mais ce n'est pas bon .. c'est pas comme ca ?
edit modif du code
Code :
|
pas encore le bon code mais je croi que c'est un peut mieu nan ?
>_< bon dieu que je suis nul snif
Marsh Posté le 02-10-2007 à 12:08:47
bon, on reprend, tu veux quoi au juste ?
en tout cas, ta requête fait du grand total n'importe quoi
Marsh Posté le 02-10-2007 à 12:15:45
erf oui ..
alors j ai une table comme celle ci :
id | nbrvoleff | nmr | numeronmr | lettrenmr
1 | 20 | truc | 001 | A
2 | 30 | truc | 001 | A
3 | 40 | truc | 001 | A
4 | 88 | blop | 002 | B
5 | 99 | blop | 002 | B
je cherche a afficher dans un tableau array parmi le group nmr numeronmr et lettrenmr l'enregistrement qui à le plus grand ID (MAX(id)) et le champ nbrvoleff qui correspond a ce MAX(id)
j'espere que je suis clair ?
merci.
Marsh Posté le 02-10-2007 à 12:26:42
On décompose :
Recherche du max(id) pour le groupe nmr, numeronmr, lettrenmr :
Code :
|
Recherche des infos pour un id donné :
Code :
|
Mix des deux :
Code :
|
Marsh Posté le 02-10-2007 à 12:34:42
edit WAaaaaaaaaaaaaa ^^
bon j ai testé ton code je vien juste de comprendre ^^"
mais il ne fontione pas
bon j ai modifier comme cela :
Code :
|
et pas mieux
Marsh Posté le 02-10-2007 à 12:40:15
nan, c'est juste une jointure entre ta table et la sous-requête qui donne la liste des plus grands id...
Marsh Posté le 02-10-2007 à 12:47:57
erf je trouve pas pourquoi la requete ne fontione pas je comprend mieu les jointures de "requetes" "sous requetes" grace a toi en tout cas ^^
merci beaucoup!
EDIT j'utilise MYSQL 4.0.18
Marsh Posté le 02-10-2007 à 13:53:17
Sous-requêtes supportées à partir de MySQL 4.1
Change de version de MySQL, ou demande à un bidouilleur MySQL, moi je sais pas faire autrement
Marsh Posté le 02-10-2007 à 13:57:04
merci beaucoup je repasse pour te donné mes resultats merci encore
Marsh Posté le 02-10-2007 à 14:01:32
Ah si, tiens, j'ai trouvé une syntaxe qui marche...
Code :
|
Je te laisse te démerder pour adapter à ton problème
Ici, je récupère :
Pour les retours marchandise de vente (achvte = V et typeve = RET) dans la société 2 (codsoc = 2) depuis le premier septembre (dateve > 20070901)
=> Le dernier avoir : max(ret1.numeve)
=> Les informations de cet avoir : les champs de ret2
Le "group by" sert à récupérer la liste de tous les derniers numéros d'avoir pour les clients (regroupement sur le champ ret2.sigtie qui est utilisé dans la jointure avec le ret1, donc regroupement implicite sur ret1.sigtie)
Le having permet de filtrer seulement les lignes de ret2 (liste des retours pour chaque client utilisé pour le regroupement des max(ret1.numeve)) qui correspondent justement à ce max
C'est clairement pas clair comme syntaxe, mais ça marche
Marsh Posté le 02-10-2007 à 14:45:20
Merci Amigo !
c'est bien Mysql 4.0.18 qui n aime pas INNER JOIN donc a la prochaine question ^^"
merci encore !
edit je n'avais pas vu la derniere syntaxe je test et je te laisse mais question je vais regarder cela de plus pres @+tard
Marsh Posté le 02-10-2007 à 14:56:26
non, rien à voir avec inner join
mysql 2 aime inner join.
ce qu'il n'aime pas c'est les sous-requêtes
Marsh Posté le 28-09-2007 à 14:04:28
hello
voila une requet qui ne fonctione pas !! :s
alors le probleme vien surement de :
b.id in (SELECT MAX(id) FROM suivi_aeronef GROUP BY nmr, nbrnmr, lettre ORDER BY id');
je ne comprend pas pourqoi mais cela bloque le tableau array, erreur sql variable incorect..
voila si quelqu un a une soluce je le remercie d avance
le but :
j ai une table avec les champ NMR NBRNMR LETTRE qui sont identique dans certain enregistrement
je ne veux que les enregistrement avec le PLUS GRAND ID(MAX(id))
$= il y a deux autre condition qui elle fonctione tres bien ( valide != 2 et la liason id = id )
voila merci d avance pour votre aide
Message édité par ails le 19-10-2007 à 09:43:23
---------------
Ritouné mwen lé ritounin