boucle sur un resultat sql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : boucle sur un resultat sql

Re: boucle sur un resultat sql

par sidaliloo » 30 nov. 2022, 12:13

salam
je m'excuse pour le retard je te remercie beaucoup pour ton aide maintenant le probleme est resolu.
je veux juste me confimer si les deux methodes ci dessous sont egaux
j'ai 3 tables:
table1
id,name,indice
|1|DR |1
|2|SLIM |1
|3|BOU |2
|4|KHIR |2
|10|ZZ|22
|6|SAMIR |3

table2
id,name,indice
|1|DR |1
|2|SLIM |1
|3|BOU |2
|5|AAA|33
|6|SAMIR |3
table3
id,name,indice
|5|DR |1
|6|SLIM |1
|9|BOU |2
je veux afficher le resultat de tous les id,indices communs et non communs.
Methode1:
SELECT t1.id,t1.s1,t1.s2,t_name2.indice as s3 FROM
(SELECT t_name.id,sum(t_name.indice) AS S1,sum(t_name1.indice) AS S2 FROM `t_name` LEFT OUTER join t_name1 on t_name.id=t_name1.id GROUP BY t_name.id
UNION
SELECT t_name1.id,sum(t_name.indice)AS S1,sum(t_name1.indice) AS S2 FROM `t_name` RIGHT OUTER join t_name1 on t_name.id=t_name1.id GROUP BY t_name1.id) as t1

LEFT OUTER join t_name2 on t1.id=t_name2.id UNION

SELECT t_name2.id,t1.s1,t1.s2,t_name2.indice as s3 FROM
(SELECT t_name.id,sum(t_name.indice) AS S1,sum(t_name1.indice) AS S2 FROM `t_name` LEFT OUTER join t_name1 on t_name.id=t_name1.id GROUP BY t_name.id
UNION
SELECT t_name1.id,sum(t_name.indice)AS S1,sum(t_name1.indice) AS S2 FROM `t_name` RIGHT OUTER join t_name1 on t_name.id=t_name1.id GROUP BY t_name1.id) as t1

RIGHT OUTER join t_name2 on t1.id=t_name2.id


ORDER by id

methode2
SELECT T.id,t_name.indice as id_tname,t_name1.indice as id_tname1,t_name2.indice as id_tname2 from ((SELECT * FROM `t_name`) UNION (SELECT * FROM `t_name1`) UNION (SELECT * FROM `t_name2`) ) AS T LEFT JOIN t_name ON T.id=t_name.id left JOIN t_name1 ON T.id=t_name1.id left JOIN t_name2 ON T.id=t_name2.id
GROUP BY T.id ORDER BY T.id

Merci d'avance.

Re: boucle sur un resultat sql

par sidaliloo » 20 nov. 2022, 12:42

je pense que je te dis :Dieu vous bénisse
attends je v verifier...

Re: boucle sur un resultat sql

par sidaliloo » 20 nov. 2022, 12:22

salam,
ta solution me resout mon probleme mais uniquement pour un petit nombre des jours mais lorsqu'on recule par 30jour ou par 365jours il me faut une boucle sur la requete ou je ne sais pas comment faire seulement par la requete.
merci.

Re: boucle sur un resultat sql

par Spols » 17 nov. 2022, 12:05

https://www.db-fiddle.com/f/9jWqRwGHoBqx1c7SLRRNEx/1
encore plus proche de ce que je comprends

Re: boucle sur un resultat sql

par Spols » 16 nov. 2022, 18:48

Re: boucle sur un resultat sql

par sidaliloo » 16 nov. 2022, 16:48

la table2 contient des dates avec le nb entre le 2022-01-01 et 2022-01-31.
et je veux faire le recule par 4jours sur chaque date de la table2 afin d'avoir ce résultat:
2022-10-28 3
2022-10-29 3
2022-10-30 6
2022-10-31 7
2022-11-01 1
2022-10-29 3
2022-10-30 6
2022-10-31 7
2022-11-01 1
2022-11-02 11
2022-10-30 6
2022-10-31 7
2022-11-01 1
2022-11-02 11
2022-11-03 2
2022-10-31 7
2022-11-01 1
2022-11-02 11
2022-11-03 2
2022-11-04 333
.
.
.
2022-11-26 33
2022-11-27 34
2022-11-28 36
2022-11-29 39
2022-11-30 31

Re: boucle sur un resultat sql

par Spols » 16 nov. 2022, 16:24

Ce que tu veux reste très opaque pour moi. donc je sais pas comment t'aider plus.

ta table 2 contient des doublons ou tu t'es trompé en la recopiant ?

Re: boucle sur un resultat sql

par Spols » 16 nov. 2022, 16:21

si j'adapte mon code à ta structure
SELECT u.Date FROM( SELECT STR_TO_DATE(t1.`date`, "%Y-%m-%d") - INTERVAL 4 DAY as Date, `id` FROM `table2` t1 UNION SELECT STR_TO_DATE(t1.`date`, "%Y-%m-%d") - INTERVAL 3 DAY as Date, `id` FROM `table2` t1 UNION SELECT STR_TO_DATE(t1.`date`, "%Y-%m-%d") - INTERVAL 2 DAY as Date, `id` FROM `table2` t1 UNION SELECT STR_TO_DATE(t1.`date`, "%Y-%m-%d") - INTERVAL 1 DAY as Date, `id` FROM `table2` t1 UNION SELECT t1.`date` AS Date, `id` FROM `table2` t1) u ORDER BY id, Date;

Code : Tout sélectionner

SVP utilise des balise [code ] ou [sql ] pour la compréhension

Re: boucle sur un resultat sql

par sidaliloo » 16 nov. 2022, 15:56

salam,
j'ai essayer d'avoir les dates de mois avec la premiere date de recule en 4jour:
select @s:=@s+1 as id,date,STR_TO_DATE(date, "%Y-%m-%d")- INTERVAL 4 DAY as date_4j from (
SELECT DATE_FORMAT(DATE_SUB(last_day(curdate()), INTERVAL xc-1 day), '%Y-%m-%d') as date
FROM (
SELECT @xi:=@xi+1 as xc from
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6) xc1,
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6) xc2,
(SELECT @xi:=0) xc0
) xcxc) x0,(SELECT @s:=0)as s where x0.date >= (select date_add(curdate(),interval-day(curdate())+1 day)) ORDER by date
résultat1:
|1|2022-11-01|2022-10-28
|2|2022-11-02|2022-10-29
|3|2022-11-03|2022-10-30
|4|2022-11-04|2022-10-31
|5|2022-11-05|2022-11-01
|6|2022-11-06|2022-11-02
|7|2022-11-07|2022-11-03
|8|2022-11-08|2022-11-04
|9|2022-11-09|2022-11-05
|10|2022-11-10|2022-11-06
|11|2022-11-11|2022-11-07
|12|2022-11-12|2022-11-08
|13|2022-11-13|2022-11-09
|14|2022-11-14|2022-11-10
|15|2022-11-15|2022-11-11
|16|2022-11-16|2022-11-12
|17|2022-11-17|2022-11-13
|18|2022-11-18|2022-11-14
|19|2022-11-19|2022-11-15
|20|2022-11-20|2022-11-16
|21|2022-11-21|2022-11-17
|22|2022-11-22|2022-11-18
|23|2022-11-23|2022-11-19
|24|2022-11-24|2022-11-20
|25|2022-11-25|2022-11-21
|26|2022-11-26|2022-11-22
|27|2022-11-27|2022-11-23
|28|2022-11-28|2022-11-24
|29|2022-11-29|2022-11-25
|30|2022-11-30|2022-11-26
j'ai une autre table qui contient de suit:
table2
id, date, nb
|7|2022-10-28|3
|8|2022-10-29|3
|9|2022-10-30|6
|10|2022-10-31|7
|1|2022-11-01|1
|2|2022-11-02|11
|3|2022-11-03|2
|4|2022-11-04|333
|5|2022-11-05|22
|6|2022-11-06|22
.
.
.
|26 |2022-10-26| 33
| 27|2022-10-27 |34
|28 |2022-10-28| 36
|29 |2022-10-30| 39
| 30|2022-11-01 |40

est ce qu'on peut boucler la table "table2" sur "resultat1" pour avoir ce résultat qui suit:
2022-10-28 3
2022-10-29 3
2022-10-30 6
2022-10-31 7
2022-11-01 1
2022-10-29 3
2022-10-30 6
2022-10-31 7
2022-11-01 1
2022-11-02 11
2022-10-30 6
2022-10-31 7
2022-11-01 1
2022-11-02 11
2022-11-03 2
2022-10-31 7
2022-11-01 1
2022-11-02 11
2022-11-03 2
2022-11-04 333
.
.
.
2022-11-26 33
2022-11-27 34
2022-11-28 36
2022-11-29 39
2022-11-30 31
c'est ca que je veux exactement uniquement par requête mysql
MERCI POUR TON AIDE

Re: boucle sur un resultat sql

par Spols » 16 nov. 2022, 11:50

essaye d'adapter la solution que je t'ai donné, je n'ai pas mieux.

Re: boucle sur un resultat sql

par sidaliloo » 16 nov. 2022, 11:43

salam,
si tu as trouvé une solution merci de m'informer.
cordialement.
Ton frère ALI

Re: boucle sur un resultat sql

par sidaliloo » 15 nov. 2022, 13:35

salam je pense que tu n'as pas bien compris.
j'ai une table qui contient des dates de 30jours:
je veux reculer pour chaque date par 4jours
exemple:
table
date
2021-12-28
2021-12-29
2021-12-30
2021-12-31
2022-01-01
2021-12-29
2021-12-30
2021-12-31
2022-01-01
2022-01-02
2021-12-30
2021-12-31
2022-01-01
2022-01-02
2022-01-03
2021-12-31
2022-01-01
2022-01-02
2022-01-03
2022-01-04
.
.
.
.
2022-01-27
2022-01-28
2022-01-29
2022-01-30
2022-01-31
merci d'avance.

Re: boucle sur un resultat sql

par Spols » 14 nov. 2022, 17:04

le nombre d'union dépend du nombre de jours de recul que tu veux. si tu veux 30 jours il faudra 29 UNION je connais pas de moyen de faire des boucle en sql (mais si c'est un script php qui génère la requète une boucle est possible)

Re: boucle sur un resultat sql

par sidaliloo » 14 nov. 2022, 16:52

je te remercie beaucoup pour ton aide,mais
le cas ou j'ai 30jours il faut faire une boucle sur l'union?:
exe:
table:
date
2022-01-01
2022-01-02
2022-01-03
2022-01-04
.
.
.
.
2022-01-31
merci d'avance

Re: boucle sur un resultat sql

par Spols » 14 nov. 2022, 13:25

SELECT u.Date FROM( SELECT STR_TO_DATE(t1.`date`, "%Y-%m-%d") - INTERVAL 4 DAY as Date, `unique` FROM `table` t1 UNION SELECT STR_TO_DATE(t1.`date`, "%Y-%m-%d") - INTERVAL 3 DAY as Date, `unique` FROM `table` t1 UNION SELECT STR_TO_DATE(t1.`date`, "%Y-%m-%d") - INTERVAL 2 DAY as Date, `unique` FROM `table` t1 UNION SELECT STR_TO_DATE(t1.`date`, "%Y-%m-%d") - INTERVAL 1 DAY as Date, `unique` FROM `table` t1 UNION SELECT t1.`date` AS Date, `unique` FROM `table` t1) u ORDER BY unique, Date;
me semble prométteur mais il faut un champs unique à chaque ligne ou complexifier encore un peu pour utiliser ROW_NUMBER()