Bonjour
Dans une table, j'enregistre les connexions d'utilisateur avec leur
login (ou celui qu'ils ont essayé), l'ip envoyée et la date. La
connexion réussie est enregistrée par un 1, sinon 0 par défaut.
Je voudrais faire une requete qui me sorte pour le même login le nombre
de dernières connexions ratées (donc le nombre d'enregistrement) depuis
leur dernière connexion réussie.
Exemple : table des connexion ratées, affichée dans l'ordre de date
décroissant (le plus résent en haut).
toto 0
titi 1
toto 0
nobel 1
nobel 0
toto 1
toto 0
toto 0
Je cherche à faire une requete qui me dirait, dans cet exemple, que toto
a 2 connexions ratées, titi aucune, nobel 1.
Bonjour
Dans une table, j'enregistre les connexions d'utilisateur avec leur
login (ou celui qu'ils ont essayé), l'ip envoyée et la date. La
connexion réussie est enregistrée par un 1, sinon 0 par défaut.
Je voudrais faire une requete qui me sorte pour le même login le nombre
de dernières connexions ratées (donc le nombre d'enregistrement) depuis
leur dernière connexion réussie.
Exemple : table des connexion ratées, affichée dans l'ordre de date
décroissant (le plus résent en haut).
toto 0
titi 1
toto 0
nobel 1
nobel 0
toto 1
toto 0
toto 0
Je cherche à faire une requete qui me dirait, dans cet exemple, que toto
a 2 connexions ratées, titi aucune, nobel 1.
Bonjour
Dans une table, j'enregistre les connexions d'utilisateur avec leur
login (ou celui qu'ils ont essayé), l'ip envoyée et la date. La
connexion réussie est enregistrée par un 1, sinon 0 par défaut.
Je voudrais faire une requete qui me sorte pour le même login le nombre
de dernières connexions ratées (donc le nombre d'enregistrement) depuis
leur dernière connexion réussie.
Exemple : table des connexion ratées, affichée dans l'ordre de date
décroissant (le plus résent en haut).
toto 0
titi 1
toto 0
nobel 1
nobel 0
toto 1
toto 0
toto 0
Je cherche à faire une requete qui me dirait, dans cet exemple, que toto
a 2 connexions ratées, titi aucune, nobel 1.
Dans une table, j'enregistre les connexions d'utilisateur avec leur
login (ou celui qu'ils ont essayé), l'ip envoyée et la date. La
connexion réussie est enregistrée par un 1, sinon 0 par défaut.
Je voudrais faire une requete qui me sorte pour le même login le nombre
de dernières connexions ratées (donc le nombre d'enregistrement) depuis
leur dernière connexion réussie.
Dans une table, j'enregistre les connexions d'utilisateur avec leur
login (ou celui qu'ils ont essayé), l'ip envoyée et la date. La
connexion réussie est enregistrée par un 1, sinon 0 par défaut.
Je voudrais faire une requete qui me sorte pour le même login le nombre
de dernières connexions ratées (donc le nombre d'enregistrement) depuis
leur dernière connexion réussie.
Dans une table, j'enregistre les connexions d'utilisateur avec leur
login (ou celui qu'ils ont essayé), l'ip envoyée et la date. La
connexion réussie est enregistrée par un 1, sinon 0 par défaut.
Je voudrais faire une requete qui me sorte pour le même login le nombre
de dernières connexions ratées (donc le nombre d'enregistrement) depuis
leur dernière connexion réussie.
Le Thu, 26 Mar 2009 21:46:00 +0100, Pascal G. a écrit:Dans une table, j'enregistre les connexions d'utilisateur avec leur
login (ou celui qu'ils ont essayé), l'ip envoyée et la date. La
connexion réussie est enregistrée par un 1, sinon 0 par défaut.
Je voudrais faire une requete qui me sorte pour le même login le nombre
de dernières connexions ratées (donc le nombre d'enregistrement) depuis
leur dernière connexion réussie.
SELECT login,COUNT(*) FROM connections WHERE is_success=0 GROUP BY login
Le Thu, 26 Mar 2009 21:46:00 +0100, Pascal G. a écrit:
Dans une table, j'enregistre les connexions d'utilisateur avec leur
login (ou celui qu'ils ont essayé), l'ip envoyée et la date. La
connexion réussie est enregistrée par un 1, sinon 0 par défaut.
Je voudrais faire une requete qui me sorte pour le même login le nombre
de dernières connexions ratées (donc le nombre d'enregistrement) depuis
leur dernière connexion réussie.
SELECT login,COUNT(*) FROM connections WHERE is_success=0 GROUP BY login
Le Thu, 26 Mar 2009 21:46:00 +0100, Pascal G. a écrit:Dans une table, j'enregistre les connexions d'utilisateur avec leur
login (ou celui qu'ils ont essayé), l'ip envoyée et la date. La
connexion réussie est enregistrée par un 1, sinon 0 par défaut.
Je voudrais faire une requete qui me sorte pour le même login le nombre
de dernières connexions ratées (donc le nombre d'enregistrement) depuis
leur dernière connexion réussie.
SELECT login,COUNT(*) FROM connections WHERE is_success=0 GROUP BY login
Dans une table, j'enregistre les connexions d'utilisateur avec leur login
(ou celui qu'ils ont essayé), l'ip envoyée et la date. La connexion
réussie est enregistrée par un 1, sinon 0 par défaut.
Je voudrais faire une requete qui me sorte pour le même login le nombre
de dernières connexions ratées (donc le nombre d'enregistrement) depuis
leur dernière connexion réussie.
Exemple : table des connexion ratées, affichée dans l'ordre de date
décroissant (le plus résent en haut).
toto 0
titi 1
toto 0
nobel 1
nobel 0
toto 1
toto 0
toto 0
Je cherche à faire une requete qui me dirait, dans cet exemple, que toto
a 2 connexions ratées, titi aucune, nobel 1.
C'est sûrement faux (je suis fatigué et le bordeaux était bon) et
probablement pas standard (Q&D test sur MySQL qui était lancé, pas cherché
plus loin), donc je ne devrais pas poster ça, mais si ça peut te mettre
sur la piste (ne serait-ce qu'en faisant réagir quelqu'un...)
mysql> explain connections;
+--------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| login | varchar(5) | YES | | NULL | |
| status | int(11) | YES | | NULL | |
| date | date | YES | | NULL | |
+--------+------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql> select * from connections;
+----+-------+--------+------------+
| id | login | status | date |
+----+-------+--------+------------+
| 1 | foo | 1 | 2009-01-01 |
| 2 | foo | 0 | 2009-01-02 |
| 3 | foo | 0 | 2009-01-03 |
| 4 | foo | 1 | 2009-02-01 |
| 5 | foo | 1 | 2009-02-02 |
| 6 | foo | 1 | 2009-02-03 |
| 7 | bar | 1 | 2009-01-01 |
| 8 | bar | 1 | 2009-01-02 |
| 9 | bar | 0 | 2009-01-03 |
| 10 | bar | 0 | 2009-01-04 |
| 11 | foo | 0 | 2009-03-01 |
| 12 | foo | 0 | 2009-03-02 |
| 13 | baaz | 1 | 2009-03-01 |
| 14 | baaz | 1 | 2009-03-02 |
| 15 | baaz | 1 | 2009-03-03 |
+----+-------+--------+------------+
15 rows in set (0.00 sec)
mysql> select c1.login, count(c1.status) as nb_failed
from connections c1
where c1.status=0
and c1.date > (
select c2.date
from connections c2
where c2.status=1
and c2.loginÁ.login
order by c2.date desc
limit 1
)
group by c1.login
union
select c1.login, 0 as nb_failed
from connections c1
where c1.status=1 and c1.date >= (
select c2.date
from connections c2
where c2.loginÁ.login
order by c2.date desc
limit 1
)
group by c1.login;
+-------+-----------+
| login | nb_failed |
+-------+-----------+
| bar | 2 |
| foo | 2 |
| baaz | 0 |
+-------+-----------+
3 rows in set (0.00 sec)
Critiques et corrections nécessaires et bienvenues...
Dans une table, j'enregistre les connexions d'utilisateur avec leur login
(ou celui qu'ils ont essayé), l'ip envoyée et la date. La connexion
réussie est enregistrée par un 1, sinon 0 par défaut.
Je voudrais faire une requete qui me sorte pour le même login le nombre
de dernières connexions ratées (donc le nombre d'enregistrement) depuis
leur dernière connexion réussie.
Exemple : table des connexion ratées, affichée dans l'ordre de date
décroissant (le plus résent en haut).
toto 0
titi 1
toto 0
nobel 1
nobel 0
toto 1
toto 0
toto 0
Je cherche à faire une requete qui me dirait, dans cet exemple, que toto
a 2 connexions ratées, titi aucune, nobel 1.
C'est sûrement faux (je suis fatigué et le bordeaux était bon) et
probablement pas standard (Q&D test sur MySQL qui était lancé, pas cherché
plus loin), donc je ne devrais pas poster ça, mais si ça peut te mettre
sur la piste (ne serait-ce qu'en faisant réagir quelqu'un...)
mysql> explain connections;
+--------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| login | varchar(5) | YES | | NULL | |
| status | int(11) | YES | | NULL | |
| date | date | YES | | NULL | |
+--------+------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql> select * from connections;
+----+-------+--------+------------+
| id | login | status | date |
+----+-------+--------+------------+
| 1 | foo | 1 | 2009-01-01 |
| 2 | foo | 0 | 2009-01-02 |
| 3 | foo | 0 | 2009-01-03 |
| 4 | foo | 1 | 2009-02-01 |
| 5 | foo | 1 | 2009-02-02 |
| 6 | foo | 1 | 2009-02-03 |
| 7 | bar | 1 | 2009-01-01 |
| 8 | bar | 1 | 2009-01-02 |
| 9 | bar | 0 | 2009-01-03 |
| 10 | bar | 0 | 2009-01-04 |
| 11 | foo | 0 | 2009-03-01 |
| 12 | foo | 0 | 2009-03-02 |
| 13 | baaz | 1 | 2009-03-01 |
| 14 | baaz | 1 | 2009-03-02 |
| 15 | baaz | 1 | 2009-03-03 |
+----+-------+--------+------------+
15 rows in set (0.00 sec)
mysql> select c1.login, count(c1.status) as nb_failed
from connections c1
where c1.status=0
and c1.date > (
select c2.date
from connections c2
where c2.status=1
and c2.loginÁ.login
order by c2.date desc
limit 1
)
group by c1.login
union
select c1.login, 0 as nb_failed
from connections c1
where c1.status=1 and c1.date >= (
select c2.date
from connections c2
where c2.loginÁ.login
order by c2.date desc
limit 1
)
group by c1.login;
+-------+-----------+
| login | nb_failed |
+-------+-----------+
| bar | 2 |
| foo | 2 |
| baaz | 0 |
+-------+-----------+
3 rows in set (0.00 sec)
Critiques et corrections nécessaires et bienvenues...
Dans une table, j'enregistre les connexions d'utilisateur avec leur login
(ou celui qu'ils ont essayé), l'ip envoyée et la date. La connexion
réussie est enregistrée par un 1, sinon 0 par défaut.
Je voudrais faire une requete qui me sorte pour le même login le nombre
de dernières connexions ratées (donc le nombre d'enregistrement) depuis
leur dernière connexion réussie.
Exemple : table des connexion ratées, affichée dans l'ordre de date
décroissant (le plus résent en haut).
toto 0
titi 1
toto 0
nobel 1
nobel 0
toto 1
toto 0
toto 0
Je cherche à faire une requete qui me dirait, dans cet exemple, que toto
a 2 connexions ratées, titi aucune, nobel 1.
C'est sûrement faux (je suis fatigué et le bordeaux était bon) et
probablement pas standard (Q&D test sur MySQL qui était lancé, pas cherché
plus loin), donc je ne devrais pas poster ça, mais si ça peut te mettre
sur la piste (ne serait-ce qu'en faisant réagir quelqu'un...)
mysql> explain connections;
+--------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| login | varchar(5) | YES | | NULL | |
| status | int(11) | YES | | NULL | |
| date | date | YES | | NULL | |
+--------+------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql> select * from connections;
+----+-------+--------+------------+
| id | login | status | date |
+----+-------+--------+------------+
| 1 | foo | 1 | 2009-01-01 |
| 2 | foo | 0 | 2009-01-02 |
| 3 | foo | 0 | 2009-01-03 |
| 4 | foo | 1 | 2009-02-01 |
| 5 | foo | 1 | 2009-02-02 |
| 6 | foo | 1 | 2009-02-03 |
| 7 | bar | 1 | 2009-01-01 |
| 8 | bar | 1 | 2009-01-02 |
| 9 | bar | 0 | 2009-01-03 |
| 10 | bar | 0 | 2009-01-04 |
| 11 | foo | 0 | 2009-03-01 |
| 12 | foo | 0 | 2009-03-02 |
| 13 | baaz | 1 | 2009-03-01 |
| 14 | baaz | 1 | 2009-03-02 |
| 15 | baaz | 1 | 2009-03-03 |
+----+-------+--------+------------+
15 rows in set (0.00 sec)
mysql> select c1.login, count(c1.status) as nb_failed
from connections c1
where c1.status=0
and c1.date > (
select c2.date
from connections c2
where c2.status=1
and c2.loginÁ.login
order by c2.date desc
limit 1
)
group by c1.login
union
select c1.login, 0 as nb_failed
from connections c1
where c1.status=1 and c1.date >= (
select c2.date
from connections c2
where c2.loginÁ.login
order by c2.date desc
limit 1
)
group by c1.login;
+-------+-----------+
| login | nb_failed |
+-------+-----------+
| bar | 2 |
| foo | 2 |
| baaz | 0 |
+-------+-----------+
3 rows in set (0.00 sec)
Critiques et corrections nécessaires et bienvenues...
Dans une table, j'enregistre les connexions d'utilisateur avec leur
login (ou celui qu'ils ont essayé), l'ip envoyée et la date. La
connexion réussie est enregistrée par un 1, sinon 0 par défaut.
Je voudrais faire une requete qui me sorte pour le même login le nombre
de dernières connexions ratées (donc le nombre d'enregistrement) depuis
leur dernière connexion réussie.
Exemple : table des connexion ratées, affichée dans l'ordre de date
décroissant (le plus résent en haut).
toto 0
titi 1
toto 0
nobel 1
nobel 0
toto 1
toto 0
toto 0
Je cherche à faire une requete qui me dirait, dans cet exemple, que toto
a 2 connexions ratées, titi aucune, nobel 1.
C'est sûrement faux (je suis fatigué et le bordeaux était bon) et
probablement pas standard (Q&D test sur MySQL qui était lancé, pas
cherché plus loin), donc je ne devrais pas poster ça, mais si ça peut te
mettre sur la piste (ne serait-ce qu'en faisant réagir quelqu'un...)
mysql> explain connections;
+--------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| login | varchar(5) | YES | | NULL | |
| status | int(11) | YES | | NULL | |
| date | date | YES | | NULL | |
+--------+------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql> select * from connections;
+----+-------+--------+------------+
| id | login | status | date |
+----+-------+--------+------------+
| 1 | foo | 1 | 2009-01-01 |
| 2 | foo | 0 | 2009-01-02 |
| 3 | foo | 0 | 2009-01-03 |
| 4 | foo | 1 | 2009-02-01 |
| 5 | foo | 1 | 2009-02-02 |
| 6 | foo | 1 | 2009-02-03 |
| 7 | bar | 1 | 2009-01-01 |
| 8 | bar | 1 | 2009-01-02 |
| 9 | bar | 0 | 2009-01-03 |
| 10 | bar | 0 | 2009-01-04 |
| 11 | foo | 0 | 2009-03-01 |
| 12 | foo | 0 | 2009-03-02 |
| 13 | baaz | 1 | 2009-03-01 |
| 14 | baaz | 1 | 2009-03-02 |
| 15 | baaz | 1 | 2009-03-03 |
+----+-------+--------+------------+
15 rows in set (0.00 sec)
mysql> select c1.login, count(c1.status) as nb_failed
from connections c1
where c1.status=0
and c1.date > (
select c2.date
from connections c2
where c2.status=1
and c2.loginÁ.login
order by c2.date desc
limit 1
)
group by c1.login
union
select c1.login, 0 as nb_failed
from connections c1
where c1.status=1 and c1.date >= (
select c2.date
from connections c2
where c2.loginÁ.login
order by c2.date desc
limit 1
)
group by c1.login;
+-------+-----------+
| login | nb_failed |
+-------+-----------+
| bar | 2 |
| foo | 2 |
| baaz | 0 |
+-------+-----------+
3 rows in set (0.00 sec)
Critiques et corrections nécessaires et bienvenues...
Bonjour
Je viens d'essayer sur ta table :
CREATE TABLE `connections` (
`id` smallint(6) NOT NULL auto_increment,
`login` varchar(50) collate utf8_bin NOT NULL,
`status` tinyint(1) NOT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT ;
--
-- Dumping data for table `connections`
--
INSERT INTO `connections` (`id`, `login`, `status`, `date`) VALUES
(1, 'foo', 1, '2009-01-01 00:00:00'),
(2, 'foo', 0, '2009-01-02 00:00:00'),
(3, 'foo', 0, '2009-01-03 00:00:00'),
(4, 'foo', 1, '2009-02-01 00:00:00'),
(5, 'foo', 1, '2009-02-02 00:00:00'),
(6, 'foo', 1, '2009-02-03 00:00:00'),
(7, 'bar', 1, '2009-01-01 00:00:00'),
(8, 'bar', 1, '2009-01-02 00:00:00'),
(9, 'bar', 0, '2009-01-03 00:00:00'),
(10, 'bar', 0, '2009-01-04 00:00:00'),
(11, 'foo', 0, '2009-03-01 00:00:00'),
(12, 'foo', 0, '2009-03-02 00:00:00'),
(13, 'baaz', 1, '2009-03-01 00:00:00'),
(14, 'baaz', 1, '2009-03-02 00:00:00'),
(15, 'baaz', 1, '2009-03-03 00:00:00');
SELECT `login`,`status` FROM `connections` ORDER BY date DESC
baaz 1
baaz 1
foo 0
baaz 1
foo 0
foo 1
foo 1
foo 1
bar 0
foo 0
bar 0
bar 1
foo 0
bar 1
foo 1
Ben... oui, il me donne les bons résultats. Je n'ai plus qu'à l'adapter à
ma table et à effectuer une recherche selon le nom d'user choisi.
Dans une table, j'enregistre les connexions d'utilisateur avec leur
login (ou celui qu'ils ont essayé), l'ip envoyée et la date. La
connexion réussie est enregistrée par un 1, sinon 0 par défaut.
Je voudrais faire une requete qui me sorte pour le même login le nombre
de dernières connexions ratées (donc le nombre d'enregistrement) depuis
leur dernière connexion réussie.
Exemple : table des connexion ratées, affichée dans l'ordre de date
décroissant (le plus résent en haut).
toto 0
titi 1
toto 0
nobel 1
nobel 0
toto 1
toto 0
toto 0
Je cherche à faire une requete qui me dirait, dans cet exemple, que toto
a 2 connexions ratées, titi aucune, nobel 1.
C'est sûrement faux (je suis fatigué et le bordeaux était bon) et
probablement pas standard (Q&D test sur MySQL qui était lancé, pas
cherché plus loin), donc je ne devrais pas poster ça, mais si ça peut te
mettre sur la piste (ne serait-ce qu'en faisant réagir quelqu'un...)
mysql> explain connections;
+--------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| login | varchar(5) | YES | | NULL | |
| status | int(11) | YES | | NULL | |
| date | date | YES | | NULL | |
+--------+------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql> select * from connections;
+----+-------+--------+------------+
| id | login | status | date |
+----+-------+--------+------------+
| 1 | foo | 1 | 2009-01-01 |
| 2 | foo | 0 | 2009-01-02 |
| 3 | foo | 0 | 2009-01-03 |
| 4 | foo | 1 | 2009-02-01 |
| 5 | foo | 1 | 2009-02-02 |
| 6 | foo | 1 | 2009-02-03 |
| 7 | bar | 1 | 2009-01-01 |
| 8 | bar | 1 | 2009-01-02 |
| 9 | bar | 0 | 2009-01-03 |
| 10 | bar | 0 | 2009-01-04 |
| 11 | foo | 0 | 2009-03-01 |
| 12 | foo | 0 | 2009-03-02 |
| 13 | baaz | 1 | 2009-03-01 |
| 14 | baaz | 1 | 2009-03-02 |
| 15 | baaz | 1 | 2009-03-03 |
+----+-------+--------+------------+
15 rows in set (0.00 sec)
mysql> select c1.login, count(c1.status) as nb_failed
from connections c1
where c1.status=0
and c1.date > (
select c2.date
from connections c2
where c2.status=1
and c2.loginÁ.login
order by c2.date desc
limit 1
)
group by c1.login
union
select c1.login, 0 as nb_failed
from connections c1
where c1.status=1 and c1.date >= (
select c2.date
from connections c2
where c2.loginÁ.login
order by c2.date desc
limit 1
)
group by c1.login;
+-------+-----------+
| login | nb_failed |
+-------+-----------+
| bar | 2 |
| foo | 2 |
| baaz | 0 |
+-------+-----------+
3 rows in set (0.00 sec)
Critiques et corrections nécessaires et bienvenues...
Bonjour
Je viens d'essayer sur ta table :
CREATE TABLE `connections` (
`id` smallint(6) NOT NULL auto_increment,
`login` varchar(50) collate utf8_bin NOT NULL,
`status` tinyint(1) NOT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT ;
--
-- Dumping data for table `connections`
--
INSERT INTO `connections` (`id`, `login`, `status`, `date`) VALUES
(1, 'foo', 1, '2009-01-01 00:00:00'),
(2, 'foo', 0, '2009-01-02 00:00:00'),
(3, 'foo', 0, '2009-01-03 00:00:00'),
(4, 'foo', 1, '2009-02-01 00:00:00'),
(5, 'foo', 1, '2009-02-02 00:00:00'),
(6, 'foo', 1, '2009-02-03 00:00:00'),
(7, 'bar', 1, '2009-01-01 00:00:00'),
(8, 'bar', 1, '2009-01-02 00:00:00'),
(9, 'bar', 0, '2009-01-03 00:00:00'),
(10, 'bar', 0, '2009-01-04 00:00:00'),
(11, 'foo', 0, '2009-03-01 00:00:00'),
(12, 'foo', 0, '2009-03-02 00:00:00'),
(13, 'baaz', 1, '2009-03-01 00:00:00'),
(14, 'baaz', 1, '2009-03-02 00:00:00'),
(15, 'baaz', 1, '2009-03-03 00:00:00');
SELECT `login`,`status` FROM `connections` ORDER BY date DESC
baaz 1
baaz 1
foo 0
baaz 1
foo 0
foo 1
foo 1
foo 1
bar 0
foo 0
bar 0
bar 1
foo 0
bar 1
foo 1
Ben... oui, il me donne les bons résultats. Je n'ai plus qu'à l'adapter à
ma table et à effectuer une recherche selon le nom d'user choisi.
Dans une table, j'enregistre les connexions d'utilisateur avec leur
login (ou celui qu'ils ont essayé), l'ip envoyée et la date. La
connexion réussie est enregistrée par un 1, sinon 0 par défaut.
Je voudrais faire une requete qui me sorte pour le même login le nombre
de dernières connexions ratées (donc le nombre d'enregistrement) depuis
leur dernière connexion réussie.
Exemple : table des connexion ratées, affichée dans l'ordre de date
décroissant (le plus résent en haut).
toto 0
titi 1
toto 0
nobel 1
nobel 0
toto 1
toto 0
toto 0
Je cherche à faire une requete qui me dirait, dans cet exemple, que toto
a 2 connexions ratées, titi aucune, nobel 1.
C'est sûrement faux (je suis fatigué et le bordeaux était bon) et
probablement pas standard (Q&D test sur MySQL qui était lancé, pas
cherché plus loin), donc je ne devrais pas poster ça, mais si ça peut te
mettre sur la piste (ne serait-ce qu'en faisant réagir quelqu'un...)
mysql> explain connections;
+--------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| login | varchar(5) | YES | | NULL | |
| status | int(11) | YES | | NULL | |
| date | date | YES | | NULL | |
+--------+------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql> select * from connections;
+----+-------+--------+------------+
| id | login | status | date |
+----+-------+--------+------------+
| 1 | foo | 1 | 2009-01-01 |
| 2 | foo | 0 | 2009-01-02 |
| 3 | foo | 0 | 2009-01-03 |
| 4 | foo | 1 | 2009-02-01 |
| 5 | foo | 1 | 2009-02-02 |
| 6 | foo | 1 | 2009-02-03 |
| 7 | bar | 1 | 2009-01-01 |
| 8 | bar | 1 | 2009-01-02 |
| 9 | bar | 0 | 2009-01-03 |
| 10 | bar | 0 | 2009-01-04 |
| 11 | foo | 0 | 2009-03-01 |
| 12 | foo | 0 | 2009-03-02 |
| 13 | baaz | 1 | 2009-03-01 |
| 14 | baaz | 1 | 2009-03-02 |
| 15 | baaz | 1 | 2009-03-03 |
+----+-------+--------+------------+
15 rows in set (0.00 sec)
mysql> select c1.login, count(c1.status) as nb_failed
from connections c1
where c1.status=0
and c1.date > (
select c2.date
from connections c2
where c2.status=1
and c2.loginÁ.login
order by c2.date desc
limit 1
)
group by c1.login
union
select c1.login, 0 as nb_failed
from connections c1
where c1.status=1 and c1.date >= (
select c2.date
from connections c2
where c2.loginÁ.login
order by c2.date desc
limit 1
)
group by c1.login;
+-------+-----------+
| login | nb_failed |
+-------+-----------+
| bar | 2 |
| foo | 2 |
| baaz | 0 |
+-------+-----------+
3 rows in set (0.00 sec)
Critiques et corrections nécessaires et bienvenues...
Bonjour
Je viens d'essayer sur ta table :
CREATE TABLE `connections` (
`id` smallint(6) NOT NULL auto_increment,
`login` varchar(50) collate utf8_bin NOT NULL,
`status` tinyint(1) NOT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT ;
--
-- Dumping data for table `connections`
--
INSERT INTO `connections` (`id`, `login`, `status`, `date`) VALUES
(1, 'foo', 1, '2009-01-01 00:00:00'),
(2, 'foo', 0, '2009-01-02 00:00:00'),
(3, 'foo', 0, '2009-01-03 00:00:00'),
(4, 'foo', 1, '2009-02-01 00:00:00'),
(5, 'foo', 1, '2009-02-02 00:00:00'),
(6, 'foo', 1, '2009-02-03 00:00:00'),
(7, 'bar', 1, '2009-01-01 00:00:00'),
(8, 'bar', 1, '2009-01-02 00:00:00'),
(9, 'bar', 0, '2009-01-03 00:00:00'),
(10, 'bar', 0, '2009-01-04 00:00:00'),
(11, 'foo', 0, '2009-03-01 00:00:00'),
(12, 'foo', 0, '2009-03-02 00:00:00'),
(13, 'baaz', 1, '2009-03-01 00:00:00'),
(14, 'baaz', 1, '2009-03-02 00:00:00'),
(15, 'baaz', 1, '2009-03-03 00:00:00');
SELECT `login`,`status` FROM `connections` ORDER BY date DESC
baaz 1
baaz 1
foo 0
baaz 1
foo 0
foo 1
foo 1
foo 1
bar 0
foo 0
bar 0
bar 1
foo 0
bar 1
foo 1
Ben... oui, il me donne les bons résultats. Je n'ai plus qu'à l'adapter à
ma table et à effectuer une recherche selon le nom d'user choisi.
Dans une table, j'enregistre les connexions d'utilisateur avec leur
login (ou celui qu'ils ont essayé), l'ip envoyée et la date. La
connexion réussie est enregistrée par un 1, sinon 0 par défaut.
Je voudrais faire une requete qui me sorte pour le même login le
nombre de dernières connexions ratées (donc le nombre
d'enregistrement) depuis leur dernière connexion réussie.SELECT login,COUNT(*) FROM connections AS c1 WHERE
is_success=0
AND
date_connection >= (SELECT date_connection FROM connections WHERE
loginÁ.login AND is_success=1 ORDER BY date_connection DESC LIMIT 1)
GROUP BY login
Bonjour.
En coréllation avec la réponse de bruno, la requete me donne une
mauvaise réponse lorsque l'utilisateur n'est jamais arrivé à se
connecter, voilà pourquoi elle m'indiquait quelquefois des résultats
faux avec ma table réelle.
Dans une table, j'enregistre les connexions d'utilisateur avec leur
login (ou celui qu'ils ont essayé), l'ip envoyée et la date. La
connexion réussie est enregistrée par un 1, sinon 0 par défaut.
Je voudrais faire une requete qui me sorte pour le même login le
nombre de dernières connexions ratées (donc le nombre
d'enregistrement) depuis leur dernière connexion réussie.
SELECT login,COUNT(*) FROM connections AS c1 WHERE
is_success=0
AND
date_connection >= (SELECT date_connection FROM connections WHERE
loginÁ.login AND is_success=1 ORDER BY date_connection DESC LIMIT 1)
GROUP BY login
Bonjour.
En coréllation avec la réponse de bruno, la requete me donne une
mauvaise réponse lorsque l'utilisateur n'est jamais arrivé à se
connecter, voilà pourquoi elle m'indiquait quelquefois des résultats
faux avec ma table réelle.
Dans une table, j'enregistre les connexions d'utilisateur avec leur
login (ou celui qu'ils ont essayé), l'ip envoyée et la date. La
connexion réussie est enregistrée par un 1, sinon 0 par défaut.
Je voudrais faire une requete qui me sorte pour le même login le
nombre de dernières connexions ratées (donc le nombre
d'enregistrement) depuis leur dernière connexion réussie.SELECT login,COUNT(*) FROM connections AS c1 WHERE
is_success=0
AND
date_connection >= (SELECT date_connection FROM connections WHERE
loginÁ.login AND is_success=1 ORDER BY date_connection DESC LIMIT 1)
GROUP BY login
Bonjour.
En coréllation avec la réponse de bruno, la requete me donne une
mauvaise réponse lorsque l'utilisateur n'est jamais arrivé à se
connecter, voilà pourquoi elle m'indiquait quelquefois des résultats
faux avec ma table réelle.
Sinon, je pensais m'orienter avec php sur deux requetes : sur la
première je regarde si il a déjà eu une bonne connexion, selon le cas
j'oriente la requete suivante soit avec un simple select count(*), soit
avec la requete de ta première réponse.
Sinon, je pensais m'orienter avec php sur deux requetes : sur la
première je regarde si il a déjà eu une bonne connexion, selon le cas
j'oriente la requete suivante soit avec un simple select count(*), soit
avec la requete de ta première réponse.
Sinon, je pensais m'orienter avec php sur deux requetes : sur la
première je regarde si il a déjà eu une bonne connexion, selon le cas
j'oriente la requete suivante soit avec un simple select count(*), soit
avec la requete de ta première réponse.