Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/03/2011, 20h34   #1
Membre éprouvé
 
Inscription : avril 2008
Messages : 554
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 554
Points : 402
Points : 402
Par défaut Requête SQL

Bonsoir à tous!

Débutant depuis peu dans l'utilisation des requêtes SQL dans Windev, je galère depuis 2 heures sur la méthode pour récupérer plusieurs informations dans plusieurs tables en une seule fois.

Malheuresement j'ai les doublons dans la table malgré l'essai avec des INNER JOIN

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
SELECT 	Contrat.IDContrat,
		Contrat.NumClient,
		Contrat.Numero_police,
		Contrat.Numero_policeAssureur,
		Contrat.periode,
		Contrat.DateEffet,
		Contrat.DateEcheance,
		Contrat.Duree,
		Contrat.exempte_taxes,
 
		Client.Raison_sociale,
		Client.NomPrenom,
 
		Avenant.IDAvenant,
		Avenant.Datefin,
 
		Avenant_ObjetDuRisqueAuto.IDObjetDuRisqueAuto,
 
		ObjetDuRisqueAuto.Num_chassis,
		ObjetDuRisqueAuto.Immatriculation
 
FROM Contrat
 
JOIN Client ON (Client.NumClient=Contrat.NumClient)
JOIN Avenant ON (Avenant.IDContrat=Contrat.IDContrat)
JOIN Avenant_ObjetDuRisqueAuto ON (Avenant_ObjetDuRisqueAuto.IDAvenant=Avenant.IDAvenant)
JOIN ObjetDuRisqueAuto ON (ObjetDuRisqueAuto.IDObjetDuRisqueAuto=Avenant_ObjetDuRisqueAuto.IDObjetDuRisqueAuto)
WHERE Numero_police LIKE %1
AND Numero_policeAssureur LIKE %2
AND Raison_sociale LIKE %3
AND NomPrenom LIKE %4
AND Num_chassis LIKE %5
AND Immatriculation LIKE %6
Vous pouvez voir sur l'image que les Id apparaissent en doublon!

Pouvez vous m'aiguiller ?

Merci d'avance
zouzoukha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 08h20   #2
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
bonjour

utilisez "distinct" apres le select
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
SELECT DISTINCT	Contrat.IDContrat,
		Contrat.NumClient,
		Contrat.Numero_police,
		Contrat.Numero_policeAssureur,
		Contrat.periode,
		Contrat.DateEffet,
		Contrat.DateEcheance,
		Contrat.Duree,
		Contrat.exempte_taxes,
 
		Client.Raison_sociale,
		Client.NomPrenom,
 
		Avenant.IDAvenant,
		Avenant.Datefin,
 
		Avenant_ObjetDuRisqueAuto.IDObjetDuRisqueAuto,
 
		ObjetDuRisqueAuto.Num_chassis,
		ObjetDuRisqueAuto.Immatriculation
 
FROM Contrat
 
JOIN Client ON (Client.NumClient=Contrat.NumClient)
JOIN Avenant ON (Avenant.IDContrat=Contrat.IDContrat)
JOIN Avenant_ObjetDuRisqueAuto ON (Avenant_ObjetDuRisqueAuto.IDAvenant=Avenant.IDAvenant)
JOIN ObjetDuRisqueAuto ON (ObjetDuRisqueAuto.IDObjetDuRisqueAuto=Avenant_ObjetDuRisqueAuto.IDObjetDuRisqueAuto)
WHERE Numero_police LIKE %1
AND Numero_policeAssureur LIKE %2
AND Raison_sociale LIKE %3
AND NomPrenom LIKE %4
AND Num_chassis LIKE %5
AND Immatriculation LIKE %6
et pourquoi ne pas utiliser STARTING WITH ?

Code :
WHERE Numero_police STARTING WHITH '1'
olivier
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 09h26   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 995
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 995
Points : 18 253
Points : 18 253
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par dehorter olivier Voir le message
et pourquoi ne pas utiliser STARTING WITH ?

Code :
WHERE Numero_police STARTING WHITH '1'
olivier
Euh... c'est du spécifique Windev, ce STARTING WITH ?

Et dans le cas présent, j'ai plutôt l'impression que les %x représentent des paramètres donnés par le programme Windev qui lance la requête.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 09h30   #4
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
je n'avais pas vu WinDev

sans la faute d'orthographe, c'est du SQL vers ??

a+
olivier
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 10h02   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 995
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 995
Points : 18 253
Points : 18 253
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par dehorter olivier Voir le message
sans la faute d'orthographe, c'est du SQL vers ??
Pas compris !

Si j'en crois la liste des mots réservés du langage SQL publiée par SQLPro, "STARTING" n'en fait pas partie. Et je n'ai jamais vu encore cette instruction qui existe donc peut-être spécifiquement dans un SGBD mais n'est probablement du SQL normalisé.
Ou alors il s'agit de "START WITH" qui figure dans le livre de SQLPro et qui concerne l'auto-incrémentation ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 14h33   #6
Nouveau Membre du Club
 
Inscription : octobre 2005
Messages : 18
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 18
Points : 36
Points : 36
Bonjour, il faudrait donner les clés primaires de vos tables. A mon avis la requête ne va pas être très performante, si il y a peu de données ça ira sinon...
samael314 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 15h32   #7
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
pour cinephil

tu as raison est une fonction specifique de FIREBIRD
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 18h05   #8
Membre éprouvé
 
Inscription : avril 2008
Messages : 554
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 554
Points : 402
Points : 402
Bonsoir à tous!

Désolé pour le retard dû à un souci de famille

Enfin,

@Olivier

J'avais également tester avec SELECT DISTINCT sans aucun résultat!

@cinephil :

Oui, en fait la requête est écrite dans une chaine et les champs sur lequels les recherches doivent s'effectuer ne sont pas accessible dans la chaine, d'ou les paramètre %1 %2...

Si vous voulez ce serait par exemple :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
sSql=[
SELECT 	Contrat.IDContrat,
		Contrat.NumClient,
		Contrat.Numero_police,
		Contrat.Numero_policeAssureur,
		Contrat.periode,
		Contrat.DateEffet,
		Contrat.DateEcheance,
		Contrat.Duree,
		Contrat.exempte_taxes,

                    Client.NumClient,		
                    Client.Raison_sociale,
		Client.NomPrenom,
		
		Avenant.IDAvenant,
		Avenant.Datefin,

		Avenant_ObjetDuRisqueAuto.IDObjetDuRisqueAuto,
		
		ObjetDuRisqueAuto.Num_chassis,
		ObjetDuRisqueAuto.Immatriculation

FROM Contrat

JOIN Client ON (Client.NumClient=Contrat.NumClient)
JOIN Avenant ON (Avenant.IDContrat=Contrat.IDContrat)
JOIN Avenant_ObjetDuRisqueAuto ON (Avenant_ObjetDuRisqueAuto.IDAvenant=Avenant.IDAvenant)
JOIN ObjetDuRisqueAuto ON (ObjetDuRisqueAuto.IDObjetDuRisqueAuto=Avenant_ObjetDuRisqueAuto.IDObjetDuRisqueAuto)
WHERE Numero_police LIKE '%champ1%'
AND Numero_policeAssureur LIKE '%champ2%'
AND Raison_sociale LIKE '%champ3%'
AND NomPrenom LIKE '%champ4%'
AND Num_chassis LIKE '%champ5%'
AND Immatriculation LIKE '%champ6%'
AND Datefin BETWEEN 'champ7' AND 'champ8'
]
ou les champs de 1 à 8 sont renseignés ou pas par l'utilisateur!

Pour les clés : si primaire signifie unique (excusez mon ignorance en sql)

Contrat.IDContrat - Id unique
Client .NumClient - Id unique
Avenant.IDAvenant - Id unique
Avenant_ObjetDuRisqueAuto.IDObjetDuRisqueAuto - Id unique

Voila mais j'ai quand même remarqué une chose :

Il suffit que je renseigne une seule condition des champs pour qu'il n'y ait pas de doublons.

Lorsque je ne renseigne aucun champ (je souhaite ramener tous les contrats) et c'est là que j'ai des doublons....

Par avance je vous remercie pour le temps que vous prenez
zouzoukha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 20h28   #9
Membre éprouvé
 
Inscription : avril 2008
Messages : 554
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 554
Points : 402
Points : 402


Salut et Merci les gars!

Je viens tout juste d'y arriver (pfoui le sql)

Comment faire pour exposer clairement et transposer en requête le problème?

J'ai vu sur le forum comment Cinephil ou SQLPro traduisent du français en code si simplement! Y apas une méthode pour savoir quand faire des SELECT dans SELECT ?

Bref voici le code obtenu qui marche enfin mais après 3 heure de galère et de tatonnement

Y a t-il une amélioration possible ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
SELECT
Contrat.IDContrat,
Contrat.NumClient,
Contrat.Numero_police,
Contrat.Numero_policeAssureur,
Contrat.periode,
Contrat.DateEffet,
Contrat.DateEcheance,
Contrat.Duree,
Contrat.exempte_taxes,
 
Client.Raison_sociale,
Client.NomPrenom
 
FROM Contrat JOIN Client ON (Client.NumClient=Contrat.NumClient)
 
WHERE Contrat.IDContrat IN (SELECT Avenant.IDContrat,
Avenant.IDAvenant,
Avenant.Datefin,
 
Avenant_ObjetDuRisqueAuto.IDObjetDuRisqueAuto,
Avenant_ObjetDuRisqueAuto.IDAvenant,
 
ObjetDuRisqueAuto.IDObjetDuRisqueAuto,
ObjetDuRisqueAuto.Num_chassis,
ObjetDuRisqueAuto.Immatriculation
 
FROM Avenant
 
INNER JOIN Avenant_ObjetDuRisqueAuto ON (Avenant_ObjetDuRisqueAuto.IDAvenant=Avenant.IDAvenant)
INNER JOIN ObjetDuRisqueAuto ON (Avenant_ObjetDuRisqueAuto.IDObjetDuRisqueAuto=ObjetDuRisqueAuto.IDObjetDuRisqueAuto)
 
%1
 
Immatriculation LIKE %2
AND Num_chassis LIKE %3
)
AND Numero_police LIKE %4
AND Numero_policeAssureur LIKE %5
AND Raison_sociale LIKE %6
AND NomPrenom LIKE %7
Sur Quel Langage je suis tombé ?
zouzoukha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 22h46   #10
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 995
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 995
Points : 18 253
Points : 18 253
Envoyer un message via MSN à CinePhil
Code :
1
2
3
4
5
6
7
8
9
10
11
WHERE Contrat.IDContrat IN (SELECT Avenant.IDContrat,
  Avenant.IDAvenant,
  Avenant.Datefin,
 
  Avenant_ObjetDuRisqueAuto.IDObjetDuRisqueAuto,
  Avenant_ObjetDuRisqueAuto.IDAvenant,
 
  ObjetDuRisqueAuto.IDObjetDuRisqueAuto,
  ObjetDuRisqueAuto.Num_chassis,
  ObjetDuRisqueAuto.Immatriculation
...
Bizarre qu'elle fonctionne ta requête !
Tu compares la colonne IDContrat à un ensemble de colonnes ! Normalement, tu devrais avoir une belle erreur de syntaxe.

Code :
WHERE IDContrat IN (SELECT IDContrat...
Cela revient à faire une jointure. J'y reviendrais plus tard.

Code :
INNER JOIN Client ON (Client.NumClient=Contrat.NumClient)
Les parenthèses sont inutiles.

Code :
1
2
3
4
5
  INNER JOIN ObjetDuRisqueAuto ON (Avenant_ObjetDuRisqueAuto.IDObjetDuRisqueAuto=ObjetDuRisqueAuto.IDObjetDuRisqueAuto)
 
%1
 
Immatriculation LIKE %2
Il manque quelque chose là ! À moins que le %1 soit le début du WHERE de la sous-requête ?

Il me semble, si je comprends bien la requête, que celle-ci est équivalente, en supposant que %1 était tout simplement un WHERE :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SELECT
  ctr.IDContrat,
  ctr.NumClient,
  ctr.Numero_police,
  ctr.Numero_policeAssureur,
  ctr.periode,
  ctr.DateEffet,
  ctr.DateEcheance,
  ctr.Duree,
  ctr.exempte_taxes,
  clt.Raison_sociale,
  clt.NomPrenom
FROM Contrat ctr
INNER JOIN Client clt ON clt.NumClient = ctr.NumClient
INNER JOIN Avenant avn ON avn.IDContrat = ctr.IDContrat
  INNER JOIN Avenant_ObjetDuRisqueAuto aora ON aora.IDAvenant = avn.IDAvenant
    INNER JOIN ObjetDuRisqueAuto ora ON ora.IDObjetDuRisqueAuto = aora.IDObjetDuRisqueAuto
WHERE Immatriculation LIKE %2
  AND Num_chassis LIKE %3
  AND Numero_police LIKE %4
  AND Numero_policeAssureur LIKE %5
  AND Raison_sociale LIKE %6
  AND NomPrenom LIKE %7
J'ai tout simplement enchaîné les jointures de la sous-requête avec celle de la requête principale.
Au passage, j'ai utilisé des alias, c'est plus facile à lire ensuite. Et il serait bon d'indiquer de quelles tables viennent toutes les colonnes utilisées dans le WHERE.
Je trouve d'ailleurs étonnant qu'il y ait à la fois Raison_sociale et NomPrenom !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 23h44   #11
Membre éprouvé
 
Inscription : avril 2008
Messages : 554
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 554
Points : 402
Points : 402
Citation:
Envoyé par CinePhil Voir le message
Code :
1
2
3
4
5
6
7
8
9
10
11
WHERE Contrat.IDContrat IN (SELECT Avenant.IDContrat,
  Avenant.IDAvenant,
  Avenant.Datefin,
 
  Avenant_ObjetDuRisqueAuto.IDObjetDuRisqueAuto,
  Avenant_ObjetDuRisqueAuto.IDAvenant,
 
  ObjetDuRisqueAuto.IDObjetDuRisqueAuto,
  ObjetDuRisqueAuto.Num_chassis,
  ObjetDuRisqueAuto.Immatriculation
...
Bizarre qu'elle fonctionne ta requête !
Pourtant elle fonctionne : IDContrat est une clé dans la Table Contrat et elle existe dans la Table Avenant

Citation:
Envoyé par CinePhil Voir le message
Code :
1
2
INNER JOIN Client ON (Client.NumClient=Contrat.NumClient)
Les parenthèses sont inutiles.
C'est noté désormais

Citation:
Envoyé par CinePhil Voir le message
Code :
1
2
3
4
5
  INNER JOIN ObjetDuRisqueAuto ON (Avenant_ObjetDuRisqueAuto.IDObjetDuRisqueAuto=ObjetDuRisqueAuto.IDObjetDuRisqueAuto)
 
%1
 
Immatriculation LIKE %2
Il manque quelque chose là ! À moins que le %1 soit le début du WHERE de la sous-requête ?
Absolument raison : Il s'agit d'une condition sur les Dates d'effet et d'échéance de l'avenant , remplacé par ce code :

Code :
1
2
3
4
5
SI SAI_DateEcheance1<>"" ET SAI_DateEcheance2<>"" ALORS
	sDateIntervalle est une chaîne = "WHERE Datefin BETWEEN '"+SAI_DateEcheance1+"' AND '"+SAI_DateEcheance2+"'"+" AND "
SINON
	sDateIntervalle="WHERE"
FIN
Citation:
Envoyé par CinePhil Voir le message
Il me semble, si je comprends bien la requête, que celle-ci est équivalente, en supposant que %1 était tout simplement un WHERE :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SELECT
  ctr.IDContrat,
  ctr.NumClient,
  ctr.Numero_police,
  ctr.Numero_policeAssureur,
  ctr.periode,
  ctr.DateEffet,
  ctr.DateEcheance,
  ctr.Duree,
  ctr.exempte_taxes,
  clt.Raison_sociale,
  clt.NomPrenom
FROM Contrat ctr
INNER JOIN Client clt ON clt.NumClient = ctr.NumClient
INNER JOIN Avenant avn ON avn.IDContrat = ctr.IDContrat
  INNER JOIN Avenant_ObjetDuRisqueAuto aora ON aora.IDAvenant = avn.IDAvenant
    INNER JOIN ObjetDuRisqueAuto ora ON ora.IDObjetDuRisqueAuto = aora.IDObjetDuRisqueAuto
WHERE Immatriculation LIKE %2
  AND Num_chassis LIKE %3
  AND Numero_police LIKE %4
  AND Numero_policeAssureur LIKE %5
  AND Raison_sociale LIKE %6
  AND NomPrenom LIKE %7
J'ai tout simplement enchaîné les jointures de la sous-requête avec celle de la requête principale.
Au passage, j'ai utilisé des alias, c'est plus facile à lire ensuite. Et il serait bon d'indiquer de quelles tables viennent toutes les colonnes utilisées dans le WHERE.
Je trouve d'ailleurs étonnant qu'il y ait à la fois Raison_sociale et NomPrenom !
+1 pour Raison_sociale et NomPrenom, malheuresement une mauvaise analyse au départ sur 2 types de souscripteur et d'assuré, mais j'ai besoin des 2 colonnes pour les afficher dans la même colonne mais je vais y remédier

Noté pour les alias, je dois m'y entrainer c'est vrai que c'est quand même plus lisible

Par contre :
Votre requête Req 1 me sort des contrats en doublons contrairement à la mienne Req 2 mal foutue

Req 1


Req 2


Et Merci encore pour pour votre patience
zouzoukha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2011, 10h00   #12
Membre éprouvé
 
Inscription : avril 2008
Messages : 554
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 554
Points : 402
Points : 402
Bonjour,

Je passe en résolu!

Merci pour l'aide
zouzoukha est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h46.


 
 
 
 
Partenaires

Hébergement Web