SELECT sur 2 tables, nb colonnes !=

Résolu/Fermé
liadea Messages postés 127 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 30 juin 2010 - 19 févr. 2010 à 13:31
Darkito Messages postés 1191 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
A voir également:

27 réponses

garion28 Messages postés 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 404
23 févr. 2010 à 08:56
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 ^^)
1
liadea Messages postés 127 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 30 juin 2010
23 févr. 2010 à 08:27
Personne n'aurait ne serait-ce que le début d'une idée ??
0
garion28 Messages postés 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 404
23 févr. 2010 à 08:34
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
0
liadea Messages postés 127 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 30 juin 2010
23 févr. 2010 à 08:41
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
garion28 Messages postés 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 404
23 févr. 2010 à 08:46
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 ?
0
liadea Messages postés 127 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 30 juin 2010
23 févr. 2010 à 08:52
Pour les 2 champs qu'il me faut en DISTINCT je n'ai pas de condition
0
liadea Messages postés 127 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 30 juin 2010
23 févr. 2010 à 08:58
C'est à dire ? lol
C'est possible d'avoir un tout p'tit peu + d'explications stp ?
0
garion28 Messages postés 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 404
23 févr. 2010 à 09:03
tu utilise du php pour créer ton fichier texte a envoyer non ?
0
liadea Messages postés 127 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 30 juin 2010
23 févr. 2010 à 09:05
Oui
0
garion28 Messages postés 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 404
23 févr. 2010 à 09:07
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
0
liadea Messages postés 127 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 30 juin 2010
23 févr. 2010 à 09:16
Je vais essayer .

Merci
0
Darkito Messages postés 1191 Date d'inscription vendredi 7 décembre 2007 Statut Membre Dernière intervention 26 mai 2010 545
23 févr. 2010 à 09:21
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"

0
liadea Messages postés 127 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 30 juin 2010
23 févr. 2010 à 09:41
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
0
garion28 Messages postés 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 404
23 févr. 2010 à 09:43
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
0
Darkito Messages postés 1191 Date d'inscription vendredi 7 décembre 2007 Statut Membre Dernière intervention 26 mai 2010 545
23 févr. 2010 à 09:50
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...
0
liadea Messages postés 127 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 30 juin 2010
23 févr. 2010 à 10:14
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é ?
0
Darkito Messages postés 1191 Date d'inscription vendredi 7 décembre 2007 Statut Membre Dernière intervention 26 mai 2010 545
23 févr. 2010 à 12:03
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 


0
liadea Messages postés 127 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 30 juin 2010
23 févr. 2010 à 12:12
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
0
Darkito Messages postés 1191 Date d'inscription vendredi 7 décembre 2007 Statut Membre Dernière intervention 26 mai 2010 545
23 févr. 2010 à 12:29
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.
0
liadea Messages postés 127 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 30 juin 2010
23 févr. 2010 à 14:41
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);



}
0