Comment le nombre total des numéros identiques apparus deux fois de suite
zack77
Messages postés
25
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour, j'ai une table sql nommée tablenumber
Ma question est:
comment afficher le nombre total de chaque numéro apparu deux fois consécutivement. J'ai créé un script php qui faut trop de calcul. Les numéros sont de 1 à 50 et ranger par date en ordre croissant
Mon script est
Ce script m'a affiché :
ainsi de suite jusqu’à 50 ème numéros, sachant que le statistique ne prend pas en compte les 3 ou 4 numéros sortis consécutivement.
EDIT : Ajout des balises de code
CREATE TABLE IF NOT EXISTS `tablenumber` ( `num` mediumint(10) NOT NULL AUTO_INCREMENT, `field1` int(11) NOT NULL, `field2` int(11) NOT NULL, `field3` int(11) NOT NULL, `field4` int(11) NOT NULL, `field5` int(11) NOT NULL, `date` date NOT NULL, PRIMARY KEY (`num`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=101 ; Contenu de la table `tablenumber` INSERT INTO `tablenumber` (`num`, `field1`, `field2`, `field3`, `field4`, `field5`, `date`) VALUES (1, 11, 19, 26, 35, 40, '2009-06-05'), (2, 6, 14, 16, 34, 50, '2009-06-12'), (3, 4, 16, 17, 20, 29, '2009-06-19'), (4, 6, 11, 21, 30, 39, '2009-06-26'), (5, 21, 29, 34, 46, 47, '2009-07-03'), (6, 6, 16, 20, 42, 46, '2009-07-10'), (7, 2, 8, 17, 32, 50, '2009-07-17'), (8, 14, 15, 25, 35, 47, '2009-07-24'), (9, 5, 9, 20, 21, 26, '2009-07-31'), (10, 10, 20, 22, 24, 31, '2009-08-07'), (11, 5, 8, 24, 30, 49, '2009-08-14'), (12, 4, 7, 16, 31, 42, '2009-08-21'), (13, 8, 36, 37, 41, 49, '2009-08-28'), (14, 29, 30, 36, 37, 48, '2009-01-02'), (15, 7, 15, 22, 28, 48, '2009-01-09'), (16, 3, 17, 22, 49, 50, '2009-01-16'), (17, 32, 33, 36, 40, 49, '2009-01-23'), (18, 4, 29, 34, 35, 46, '2009-01-30'), (19, 10, 20, 30, 36, 40, '2009-02-06'), (20, 22, 33, 36, 40, 42, '2009-02-13'), (21, 9, 12, 13, 14, 48, '2009-02-20'), (22, 5, 9, 37, 44, 45, '2009-02-27'), (23, 13, 17, 19, 25, 35, '2009-03-06'), (24, 12, 24, 26, 36, 42, '2009-03-13'), (25, 12, 16, 23, 31, 35, '2009-03-20'), (26, 25, 33, 36, 38, 42, '2009-03-27'), (27, 2, 20, 24, 32, 46, '2009-04-03'), (28, 9, 14, 16, 37, 46, '2009-04-10'), (29, 4, 7, 21, 44, 47, '2009-04-17'), (30, 4, 14, 21, 24, 41, '2009-04-24'), (31, 5, 19, 31, 38, 47, '2009-05-01'), (32, 4, 23, 24, 29, 31, '2009-05-08'), (33, 8, 18, 19, 20, 42, '2009-05-15'), (34, 4, 13, 14, 33, 43, '2009-05-22'), (35, 2, 5, 30, 37, 47, '2009-05-29'), (36, 6, 9, 20, 38, 39, '2009-09-04'), (37, 12, 15, 35, 42, 43, '2009-09-11'), (38, 22, 23, 24, 29, 44, '2009-10-02'), (39, 7, 11, 29, 46, 50, '2009-10-09'), (40, 12, 23, 30, 31, 47, '2009-10-16'), (41, 9, 33, 35, 38, 40, '2009-10-30'), (42, 6, 17, 18, 21, 34, '2009-09-25'), (43, 6, 16, 30, 38, 41, '2009-09-18'), (44, 6, 18, 20, 29, 31, '2009-10-23'), (45, 5, 9, 28, 43, 47, '2009-11-20'), (46, 11, 19, 34, 43, 45, '2009-11-06'), (47, 13, 15, 25, 26, 32, '2009-11-13'), (48, 5, 8, 13, 15, 33, '2009-11-27'), (49, 18, 19, 25, 30, 44, '2009-12-04'), (50, 20, 41, 43, 44, 46, '2009-12-11'), (51, 14, 30, 32, 35, 49, '2009-12-18'), (52, 4, 5, 14, 17, 34, '2009-12-25'), (53, 1, 5, 18, 38, 45, '2010-02-12'), (54, 34, 35, 38, 39, 46, '2010-02-05'), (55, 9, 17, 30, 39, 43, '2010-01-29'), (56, 4, 22, 27, 36, 44, '2010-01-22'), (57, 11, 26, 29, 49, 50, '2010-01-15'), (58, 4, 5, 14, 44, 46, '2010-01-08'), (59, 9, 22, 24, 27, 36, '2010-01-01'), (60, 10, 28, 30, 38, 39, '2010-03-19'), (61, 8, 16, 18, 37, 43, '2010-03-26'), (62, 12, 18, 24, 26, 45, '2010-04-02'), (63, 1, 26, 33, 36, 46, '2010-03-12'), (64, 12, 18, 19, 43, 49, '2010-03-05'), (65, 7, 11, 18, 29, 42, '2010-02-26'), (66, 12, 31, 37, 38, 43, '2010-02-19'), (67, 38, 39, 45, 46, 49, '2010-07-16'), (68, 9, 13, 15, 19, 24, '2015-01-30'), (69, 17, 31, 33, 44, 50, '2015-02-03'), (70, 10, 26, 30, 39, 50, '2015-02-06'), (71, 13, 17, 20, 30, 45, '2015-02-10'), (72, 12, 24, 39, 42, 44, '2015-02-13'), (73, 2, 5, 18, 30, 43, '2015-02-17'), (74, 4, 10, 14, 37, 46, '2015-02-20'), (75, 5, 14, 17, 25, 47, '2015-02-27'), (76, 3, 25, 28, 34, 50, '2015-02-24'), (77, 6, 8, 11, 13, 21, '2015-03-03'), (78, 22, 24, 25, 28, 49, '2015-01-02'), (79, 14, 20, 30, 38, 49, '2015-01-06'), (80, 6, 21, 24, 32, 45, '2015-01-09'), (81, 8, 17, 21, 31, 34, '2015-01-13'), (82, 29, 30, 32, 34, 46, '2015-01-16'), (83, 15, 33, 41, 44, 47, '2015-01-20'), (84, 6, 29, 30, 38, 45, '2015-01-23'), (85, 5, 10, 31, 33, 40, '2015-01-27'), (86, 16, 29, 32, 36, 41, '2004-02-13'), (87, 7, 13, 39, 47, 50, '2004-02-20'), (88, 14, 18, 19, 31, 37, '2004-02-27'), (89, 4, 7, 33, 37, 39, '2004-03-05'), (90, 15, 24, 28, 44, 47, '2004-03-12'), (91, 33, 36, 37, 42, 45, '2004-03-19'), (92, 3, 4, 10, 23, 43, '2004-03-26'), (93, 4, 12, 24, 27, 36, '2004-04-02'), (94, 1, 4, 10, 19, 23, '2004-04-09'), (95, 14, 15, 28, 35, 40, '2004-04-16'), (96, 6, 10, 21, 45, 49, '2004-04-23'), (97, 5, 6, 16, 23, 27, '2004-04-30'), (98, 15, 16, 21, 36, 38, '2004-05-07'), (99, 1, 3, 21, 32, 39, '2004-05-14'), (100, 15, 29, 37, 39, 49, '2004-05-21');
Ma question est:
comment afficher le nombre total de chaque numéro apparu deux fois consécutivement. J'ai créé un script php qui faut trop de calcul. Les numéros sont de 1 à 50 et ranger par date en ordre croissant
Mon script est
<center><table border="1" cellpadding="1" cellspacing="1" style="width:500px"><tbody> <tr> <td><span style="color:#FF0000"><strong>N°</td> <td><span style="color:#FF0000"><strong> Numéros </td> </tr><?php $i=1;$nbr=0; while ($i<51) { $req1=$base->query("SELECT * FROM `tablenumber` WHERE `n1`='$i' or `n2`='$i' or `n3`='$i' or `n4`='$i' or `n5` ='$i' order by date asc"); while($affiche = $req1->fetch(PDO::FETCH_BOTH)) { $req=$base->query("SELECT num, n1, n2,n3,n4,n5,date FROM `tablenumber` WHERE `date`>'".$affiche['date']."' ORDER BY date asc limit 0,1"); $result = $req->fetch(PDO::FETCH_BOTH); if($result['n1']==$i or $result['n2']==$i or $result['n3']==$i or $result['n4']==$i or $result['n5']==$i) { $nbr++; //print_r($result);echo "".$affiche['date']."<br>"; } } ?><tr> <td> <?php echo" <font color='blue'>$i</font> "?> </td> <td> <?php echo $nbr ?></td> <tr><?php $i++;$nbr=0; } ?> </tbody></table>
Ce script m'a affiché :
N° Nombre
1 0 sortie consécutive
2 0 sortie consécutive
3 0 sortie consécutive
4 3 sorties consécutives
5 1 sortie consécutive
6 2 sorties consécutives
7 0
8 0
9 1
10 0
11 0
12 1
ainsi de suite jusqu’à 50 ème numéros, sachant que le statistique ne prend pas en compte les 3 ou 4 numéros sortis consécutivement.
EDIT : Ajout des balises de code
A voir également:
- Comment le nombre total des numéros identiques apparus deux fois de suite
- Nombre de jours entre deux dates excel - Guide
- Total uninstall - Télécharger - Divers Utilitaires
- Comment faire deux colonnes sur word - Guide
- Comment utiliser deux numéros sur whatsapp - Guide
- Formule total excel - Guide
2 réponses
Bonjour,
Déjà, pour coller son code sur le forum, merci d'utiliser les BALISES DE CODE.
Explications disponibles ici. https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
Ensuite, je t'invite à lire ceci :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Et enfin ,
je pense que si tu retravailles un peu l'array contenant les données, cela facilitera ensuite la recherche que tu souhaites mettre en place.
Donc maintenant tu as deux array
Un contenant la liste des numéros et à quelles dates il sont sorti
et un array contenant la liste des dates.
Cela devrait être assez simplet de boucler sur le premier et de vérifier avec le second si les dates se suivent ou non..
Déjà, pour coller son code sur le forum, merci d'utiliser les BALISES DE CODE.
Explications disponibles ici. https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
Ensuite, je t'invite à lire ceci :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Et enfin ,
je pense que si tu retravailles un peu l'array contenant les données, cela facilitera ensuite la recherche que tu souhaites mettre en place.
<?php //--------------------------------------------------------------------------// //Affichage des erreurs PHP //--------------------------------------------------------------------------// error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //--------------------------------------------------------------------------// //Récupération des numéros dans la bdd //--------------------------------------------------------------------------// //préparation de la requête $sql = "SELECT * FROM tablenumber"; //Execution de la requete try{ $requete = $base-> prepare($sql) ; $requete->execute() ; $arrNum = $requete->fetchAll(); //on stocke le resultat dans un array }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); } //--------------------------------------------------------------------------// // On retravaille la liste des numéros.. //--------------------------------------------------------------------------// $arr_numeros = array(); $arr_dates = array(); foreach ($arrNum as $R){ $date = $R['date']; $arr_dates[$date] = $date; //on récupère le contenu des champs field1... field5 for($i = 1; $i<=5;$i++){ if(!empty($R['field'.$i])){ $arr_numeros[$R['field'.$i]][]=$date; } } } ksort($arr_numeros); //on re trie le tableau dans l'ordre... ksort($arr_dates); //on re trie le tableau dans l'ordre... //Affichage du tableau echo "<pre> Numéros <br>"; print_r($arr_numeros); echo "</pre>"; echo "<pre> Dates des tirages<br>"; print_r($arr_dates); echo "</pre>"; ?>
Donc maintenant tu as deux array
Un contenant la liste des numéros et à quelles dates il sont sorti
et un array contenant la liste des dates.
Cela devrait être assez simplet de boucler sur le premier et de vérifier avec le second si les dates se suivent ou non..
<?php //base de données $base = new PDO('mysql:dbname=stat_numero;host=localhost;charset=utf8', 'root', ''); $base->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $base->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); ?> <center><table border="1" cellpadding="1" cellspacing="1" style="width:500px"><tbody> <tr> <td><span style="color:#FF0000"><strong>N°</td> <td><span style="color:#FF0000"><strong> Numéros </td> </tr><?php $i=1;$nbr=0; while ($i<51) { $req1=$base->query("SELECT * FROM `tablenumber` WHERE `n1`='$i' or `n2`='$i' or `n3`='$i' or `n4`='$i' or `n5` ='$i' order by date asc"); while($affiche = $req1->fetch(PDO::FETCH_BOTH)) { $req=$base->query("SELECT num, n1, n2,n3,n4,n5,date FROM `tablenumber` WHERE `date`>'".$affiche['date']."' ORDER BY date asc limit 0,1"); $result = $req->fetch(PDO::FETCH_BOTH); if($result['n1']==$i or $result['n2']==$i or $result['n3']==$i or $result['n4']==$i or $result['n5']==$i) { $nbr++; //print_r($result);echo "".$affiche['date']."<br>"; } } ?><tr> <td> <?php echo" <font color='blue'>$i</font> "?> </td> <td> <?php echo $nbr ?></td> <tr><?php $i++;$nbr=0; } ?> </tbody></table>
mon script affiche le résultat souhaite, mais il fait trop de calcul inutile, je souhaite le simplifier merci.
J'ai eu le message d'erreur suivant :
Warning: Illegal string offset 'date' in C:\wamp\www\pdo_url_rewrite\seeupdatedelete\new5.php on line 79
Moi je souhaite afficher le nombre total des numéros qui sont enregistrés deux fois de suite par date.
Par exemple si le numéro 1 est présent dans les enregistrement 01 et le 02 puis le 7 et le 8 puis le 20 et le 21
Je souhaite que mon script affiche que le 1 est enregistré 3 deux fois de suite.
Si tu as eu un message d'erreur.. c'est que tu as modifié quelquechose dans ta bdd ou que tu as mal copié le code que je t'ai donné.
J'ai bien compris que ton code donne le resultat obtenu.. mais qu'il est trop lent... et que tu veux l'améliorer.
Je t'ai donc donné une base de travail.... mais ne t'attends pas à ce que je fasse le boulot à ta place.