8722 sujets

Développement web côté serveur, CMS

Bonjour,

En tapant cette requête :
select state, max(id) FROM questions WHERE user_id = 28;

Je m'attendais naïvement à ce que la DB extraie l'id max de ma table et le statut auquel celui-ci est lié.

A la place, mon SGBD m'encourage à donner un GROUP BY, ce qui génère plusieurs rows.
Or, je ne veux pas plusieurs rows...

Je souhaite récupérer la dernière des questions posées par l'utilisateur, et connaître le statut de cette dernière spécifiquement (ce qui devrait me générer une seule ligne et 2 colonnes).

Pouvez-vous me dire comment adapter ma requête pour qu'elle me renvoie ce que j'attends svp?
Merci Smiley smile
Bonsoir.

Je ne suis pas spécialiste (le résultat est assez affreux) mais ça a l'air de fonctionner :
SELECT state FROM Questions WHERE id = (SELECT MAX(id) FROM (SELECT id FROM Questions WHERE user_id = 28) AS user_id_28);


Si ça marche pour vous... en attendant plus optimisé ...

Smiley smile
Administrateur
S'il s'agit vraiment de retenir le max, un petit ORDER BY peut suffire

SELECT id,state FROM questions ORDER BY id DESC LIMIT 1;


Après il faut savoir que si le champ id est une clé primaire en auto_increment, ce n'est pas toujours hyper fiable, on peut très bien avoir des "trous" dans la table s'il y a des suppressions par exemple. Même si dans l'ensemble cela peut largement suffire. L'idéal serait plutôt de mémoriser la date du moment, lors de l'enregistrement. Dans ce cas, un ORDER BY sur ce champ serait parfait.
Merci beaucoup, Zelena et Dew !

LIMIT 1, mais bien sûr !

Je ne pense jamais à lui pour ne l'avoir pas (beaucoup) utilisé jusqu'alors.
Je ne l'oublierai plus, désormais...

Dans la mesure où je fais la recherche sur toutes les questions posées par l'utilisateur X, s'il y a une suppression, la requête me retournera l'avant dernière question si la dernière n'y est plus. Il n'y a dès lors pas de risque de "trou" à mon sens ?

Zelena, tu sembles t'être donné du mal pour cette requête Smiley confused
Mais elle fonctionne aussi et ça, c'est bien ! Smiley cligne
Modifié par Reka (03 Jan 2017 - 18:10)
Reka a écrit :

Zelena, tu sembles t'être donné du mal pour cette requête Smiley confused

Je préfère la méthode de Dew... Smiley sweatdrop

Il existe aussi une fonction LAST_INSERT_ID() mais je ne la connais pas très bien...

Smiley smile
Administrateur
Last insert ID est intéressante mais là aussi pas de garantie que ce soit "chronologiquement" le dernier enregistrement ajouté par un utilisateur.
dew a écrit :
Last insert ID est intéressante mais là aussi pas de garantie que ce soit "chronologiquement" le dernier enregistrement ajouté par un utilisateur.


Et en plus la variable système renvoyée n'existe que le temps de la session... Smiley ohwell

Smiley smile