Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
devweb:mysql [23-01-2015 09:07] edmc73 |
devweb:mysql [15-04-2021 14:28] edmc73 |
||
---|---|---|---|
Ligne 7: | Ligne 7: | ||
* http:// | * http:// | ||
+ | |||
+ | |||
+ | ===== Cas d'une table de config avec une date ===== | ||
+ | |||
+ | ^ id ^ user_id | ||
+ | | 1 | 1 | 2020-03-10 | toto | | ||
+ | | 2 | 1 | 2020-03-20 | super toto | | ||
+ | | 3 | 2 | 2020-01-01 | tata | | ||
+ | |||
+ | je veux les derniers nom des utilisateurs | ||
+ | |||
+ | <code sql> | ||
+ | select user_id, name | ||
+ | from users t1 | ||
+ | WHERE EXISTS(SELECT 1 | ||
+ | FROM users t2 | ||
+ | WHERE t2.user_id = t1.user_id | ||
+ | GROUP BY t2.user_id | ||
+ | | ||
+ | </ | ||
+ | |||
+ | ^ user_id ^ name ^ | ||
+ | | 1 | super toto | | ||
+ | | 2 | tata | | ||
+ | |||
+ | Par contre, si vous avez des date dans le futur, il faudra utiliser cette requête | ||
+ | <code sql> | ||
+ | select user_id, name | ||
+ | from users t1 | ||
+ | WHERE EXISTS(SELECT 1 | ||
+ | FROM users t2 | ||
+ | WHERE t2.user_id = t1.user_id and t2.date< | ||
+ | GROUP BY t2.user_id | ||
+ | | ||
+ | </ | ||
+ | |||
+ | |||
+ | Variantes de la 1ère requête qui semble plus rapide | ||
+ | <code sql> | ||
+ | select t1.user_id, | ||
+ | from users as t1, | ||
+ | ( | ||
+ | select user_id, MAX(date) as date | ||
+ | from users | ||
+ | group by user_id | ||
+ | ) as t2 | ||
+ | where | ||
+ | t1.user_id=t2.user_id and t1.date=t2.date | ||
+ | </ |