SELECT sur 2 tables, nb colonnes != [Résolu/Fermé]

Messages postés
127
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
30 juin 2010
- - Dernière réponse : Darkito
Messages postés
1193
Date d'inscription
vendredi 7 décembre 2007
Statut
Membre
Dernière intervention
26 mai 2010
- 24 févr. 2010 à 15:47
Bonjour,

2 tables t1 et t2
données = d

dans la 1ere j'ai besoin de plusieurs données dont 2 doivent être DISTINCT

SELECT DISTINCT t1.d1 , t1.d2

mais aussi d'autres données de cette table mais qui ne doivent pas être distinct

SELECT t1.d3, t1.d4, t1.d5

mais aussi de faire un select sur la 2eme table avec 3 données

SELECT t2.d1 , t2.d2, t2.d3

En résumé :
SELECT DISTINCT t1.d1 , t1.d2 FROM t1
SELECT t1.d3, t1.d4, t1.d5 FROM t1
SELECT t2.d1 , t2.d2, t2.d3 FROM t1, t2 WHERE t1.d5 = t2.d1 AND t2.d2 = "toto" AND t2.d3 ="tutu"

Est - ce clair ?
Est - ce possible en une seule requête car le résultat de cette requête est écrit dans un fichier texte que j'envoie ensuite par mail !

Merci d'avance
Afficher la suite 

20/27 réponses

Meilleure réponse
Messages postés
1569
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
24 mars 2011
198
1
Merci
ca serai plus simple de passer par des variables pour stocker tes résultat et formater ton fichier (formater dans le sens donner un format précis et pas supprimer ^^)

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60284 internautes nous ont dit merci ce mois-ci

Messages postés
127
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
30 juin 2010
0
Merci
Personne n'aurait ne serait-ce que le début d'une idée ??
Messages postés
1569
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
24 mars 2011
198
0
Merci
tu ne pourrai pas donner des info plus concrète ? parce que moi les t1,d1,toto,tutu ca me fait penser a un de mes profs et en plus ca ne veut strictement rien dire

et tu ne peut pas mettre plusieurs select dans une requète (c'est comme si tu mettai plusieurs volant dans une voiture)
a premiere vu yaurai juste a tout mettre dans la même requète, le distinct sert juste a enlever les doublons
Messages postés
127
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
30 juin 2010
0
Merci
Bonjour,

merci d'avoir répondu
En effet c'est ce que je voudrais enlever les doublons mais que sur 2 colonnes de ma 1ere table et ensuite selectionner d'autres colonnes de cette même table mais qui elles n'ont pas de doublons !
Et ensuite intégrer des données de la 2eme table.

Il me faut une seule requête pour récupérer l'ensemble de ces données que j'inscrit dans un fichier texte.

c'est un peu plus clair ou toujours pas ? ? lol
Messages postés
1569
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
24 mars 2011
198
0
Merci
bof, je m'en contenterai :D

a la limite tu t'en fou d'utiliser le distinct sur des champs où il n'y a pas de doublon, ca ne va pas te supprimer des champs

par contre pour les 2 premères ligne, est ce que tu veu extraire les champs sans condition ? ou bien tu veu prendre les conditions de la 3 ème (et derniere) ligne ?
Messages postés
127
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
30 juin 2010
0
Merci
Pour les 2 champs qu'il me faut en DISTINCT je n'ai pas de condition
Messages postés
127
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
30 juin 2010
0
Merci
C'est à dire ? lol
C'est possible d'avoir un tout p'tit peu + d'explications stp ?
Messages postés
1569
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
24 mars 2011
198
0
Merci
tu utilise du php pour créer ton fichier texte a envoyer non ?
Messages postés
127
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
30 juin 2010
0
Merci
Oui
Messages postés
1569
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
24 mars 2011
198
0
Merci
donc tu peu faire plusieurs requètes et mettre le résultat de ces requètes dans ton fichier texte, cependant vu que les info ne sont pas forcément les mêmes il vaut mieux que la personne qui recevra le fichier sache comment traiter les infos et a quoi correspond chaque colonne
Messages postés
127
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
30 juin 2010
0
Merci
Je vais essayer .

Merci
Messages postés
1193
Date d'inscription
vendredi 7 décembre 2007
Statut
Membre
Dernière intervention
26 mai 2010
487
0
Merci
Bonjour,

il doit y avoir moyen de trouver ce que tu cherches avec une jointure :
SELECT 
(DISTINCT t1.d1),
(DISTINCT t1.d2),
t1.d3, 
t1.d4, 
t1.d5,
t2.d1 , 
t2.d2, 
t2.d3
FROM t1
LEFT JOIN t2 ON t1.d5 = t2.d1 AND t2.d2
WHERE t2.d2 = "toto" AND t2.d3 ="tutu"

Messages postés
127
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
30 juin 2010
0
Merci
Bonjour,
Je pense aussi que ça peut se faire en une seule requête avec des jointures mais bon malgrés tous les essais que j'ai pu faire j'ai jamais obtenu ce que je souhaitais et toujours pas avec celle que tu viens de me donner !!

Merci encore
Si vous avez d'autres idées hésitez pas !!
Merci
Messages postés
1569
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
24 mars 2011
198
0
Merci
si tu ne fait qu'une requète, alors tout les champs du select seront soumis aux conditions.

il y a ptete une solution avec des requètes multiple (genre requète imbriqué), mais vu la complexité tu ferai pareil avec du code et plusieurs requètes (ca ne ferai que quelques lignes en plus
Messages postés
1193
Date d'inscription
vendredi 7 décembre 2007
Statut
Membre
Dernière intervention
26 mai 2010
487
0
Merci
Pour rejoindre le post 3 de Garion28, peux-tu nous donner un exemple des lignes de tes tables avec le résultat attendu ?
Cela permettrai de mieux comprendre ce que tu cherches vraiment.


Je pense quand même qu'il vaut mieux faire une seule requête, même si elle est un peu plus complexe plutôt que de faire un traitement php derrière...
Messages postés
127
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
30 juin 2010
0
Merci
1ere Table :

NomNetbios SourceMAJ AdresseIP EmailENTITE ENTITE SITE
toto aaaa.fr 1.2.3.4 support-mess@nantes.fr nantes orvault
tata bbbb.fr 5.6.7.8 support-mess@nantes.fr nantes carquefou
tutu cccc.fr 9.10.11.12 support-mess@rennes.fr rennes cleunay



2eme Table :

AdresseIP SourceMAJ DateUA ETAT (=résultat PING du jour)
1.2.3.4 aaaa.fr 2010-02-23 1
5.6.7.8 bbbb.fr 2010-02-23 0
9.10.11.12 cccc.fr 2010-02-23 1

Donc j'ai +sieurs fois le meme email et la meme entite
je dois récupérer toutes les infos de la 1ere table SI l'adresseIP de la 1ere est dans la 2eme que la date est la date du jour et que son etat et KO c'est à dire = à 1.

dans a 2eme table je vais avoir aussi des données des dates précédente avec les mêmes adresses IP et source qui ont été pinguer les jours précedents.

Il faut donc que je récupère qu'une seule fois le mail ainsi que l'entite car mon fichier portera le nom de l'entité et enverra au mail correspondant.
Une Entité peut avoir plusieurs IP
donc je vais pas envoyé 10 fois un mail avec une IP différente je voudrais tout regrouper !!


c'est un peu plus clair ou trop compliqué ?
Messages postés
1193
Date d'inscription
vendredi 7 décembre 2007
Statut
Membre
Dernière intervention
26 mai 2010
487
0
Merci
C'est un peu plus clair avec le cas concret.
Tu veux envoyer à chaque entité la liste de leur serveurs qui ne répondent pas au ping ?
Si tu crées un fichier texte par entité, il faut effectivement que tu fasse plusieurs requêtes...

Dans un premier temps, tu récupères la liste des entités à qui il faut envoyer un mail :
SELECT DISTINCT
ENTITE,
EmailENTITE 
FROM Table1 t1
JOIN Table2 t2 ON t1.AdresseIP =t2.AdresseIP AND t2.ETAT=1 AND t2.DateUA = CURRENT DATE 



Ensuite, pour chacune de ces entités, tu récupères la liste des serveurs qui ne répondent pas :
SELECT 
t1.NomNetbios,
t1.AdresseIP, 
t1.SITE
FROM Table1 t1
JOIN Table2 t2 ON t1.AdresseIP =t2.AdresseIP AND t2.ETAT=1 AND t2.DateUA = CURRENT DATE 


Messages postés
127
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
30 juin 2010
0
Merci
Oui merci
Mais comment fait on pour écrire les résultats de ces 2 requêtes dans un même fichier texte ??
C'est pourquoi je ne voulait en faire qu'une seule afin d'écrire le résultat dans le fichier texte en fonction de l'entité et l'envoyer
Messages postés
1193
Date d'inscription
vendredi 7 décembre 2007
Statut
Membre
Dernière intervention
26 mai 2010
487
0
Merci
Pour la 2eme requête, j'ai oublié de mettre la condition sur l'entité :
SELECT 
t1.NomNetbios,
t1.AdresseIP, 
t1.SITE
FROM Table1 t1
JOIN Table2 t2 ON t1.AdresseIP =t2.AdresseIP AND t2.ETAT=1 AND t2.DateUA = CURRENT DATE 
WHERE ENTITE=$entite_php



la première requête te donne le destinataire et le titre de ton mail.

Dans le corps, tu mets le résultat de la 2eme requête.
Messages postés
127
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
30 juin 2010
0
Merci
Je te remercie je récupère bien les données dont j'ai besoin cependant j'ai un dernier soucis, je n'ai qu'un seul fichier texte de créer au lieu de 3 en fonction de mes entité qui bug !
Est ce que tu serais me dire comment faire ?
je t'ai mis mon code si tu as un peu de temps!
Merci d'avance



$today = date("Y-m-d");



$req1 = "SELECT DISTINCT EmailENTITE,ENTITE FROM ua
JOIN notifications ON ua.AdresseIP = notifications.AdresseIP
WHERE notifications.ETAT='1' AND notifications.DateUA = '$today'";

$res1 = mysql_query($req1) or die('Erreur SQL !<br />' . $req1 . '<br />' . mysql_error());

//Récuperation des résultats
while ($row = mysql_fetch_row($res1)){
$mailent = $row[0];
$entite = $row[1];

echo" <br/>
<br/>MAIL ENTITE : $mailent
<br/>ENTITE : $entite
<br/>
";
}




$req2 = "SELECT '$mailent','$entite',ua.NomNetbios,ua.SourceMAJ,ua.AdresseIP,ua.SITE,notifications.DateUA,notifications.ETAT FROM ua
JOIN notifications
ON ua.AdresseIP = notifications.AdresseIP
AND notifications.ETAT='1' AND notifications.DateUA = '$today'
WHERE ENTITE = '$entite'
AND EmailENTITE = '$mailent'";

$res2 = mysql_query($req2) or die('Erreur SQL !<br />' . $req2 . '<br />' . mysql_error());




//Récuperation des résultats
while ($row = mysql_fetch_row($res2)){
$mailent = $row[0];
$entite = $row[1];
$netbios = $row[2];
$source = $row[3];
$ip = $row[4];
$site = $row[5];
$date = $row[6];
$eta = $row[7];


$hl = "Hors Ligne";
$etat=STR_REPLACE("1","$hl","$eta");

echo" <br/>
<br/>MAIL ENTITE : $mailent
<br/>ENTITE : $entite
<br/>NOM NETBIOS : $netbios
<br/>SOURCE MAJ : $source
<br/>ADRESSE IP : $ip
<br/>SITE : $site
<br/>DATE : $date
<br/>ETAT : $etat
<br/>
";



$fp = fopen("$entite.txt","a");

fwrite($fp, "\nNOM NETBIOS");
fwrite($fp, "\tSOURCE");
fwrite($fp, "\tADRESSE IP");
fwrite($fp, "\tMAIL ENTITE");
fwrite($fp, "\tENTITE");
fwrite($fp, "\tSITE");
fwrite($fp, "\tDATEUA");
fwrite($fp, "\tETAT");

fwrite($fp, "\n$netbios");
fwrite($fp, "\t$source");
fwrite($fp, "\t$ip");
fwrite($fp, "\t$mailent");
fwrite($fp, "\t$entite");
fwrite($fp, "\t$site");
fwrite($fp, "\t$date");
fwrite($fp, "\t$etat");

fclose($fp);



}