Selection avec jointures entre tables

Résolu/Fermé
CreaZo Messages postés 15 Date d'inscription mercredi 16 septembre 2015 Statut Membre Dernière intervention 24 juin 2016 - 19 déc. 2015 à 13:09
CreaZo Messages postés 15 Date d'inscription mercredi 16 septembre 2015 Statut Membre Dernière intervention 24 juin 2016 - 19 déc. 2015 à 17:02
Bonjour à tous,

Je suis en train de travailler quelque chose sur une sortie php d'une sélection MysSql qui me complique la vie, je ne sais trop comment vous l’exposer donc voila des détails avant :

Ma table wp_wysija_user avec les colonne suivantes :
user_id (stockée sous forme de chiffre)
email (stockée sous forme de mail)

Ma seconde table wp_wysija_user_list avec les colonne suivantes :
list_id (stockée sous forme de chiffre)
user_id (stockée sous forme de chiffre)
sub_date (stockée sous format UNIX)
unsub_date (stockée sous format UNIX)

Ma troisième table wp_wysija_campaign
campaign_id (stockée sous forme de chiffre)
name (stockée sous forme de nom de ma mailing-list)

Ma quatrième table wp_wysija_campaign_list

list_id (stockée sous forme de chiffre)
campaign_id (stockée sous forme de chiffre)

Je souhaite récupérer sous forme de tableau les dates de désinscription (unsub_date) avec leur liste associés (list_id) sous forme de noms avec les emails associés.

Pour l’instant le code (plus bas) me retourne ceci (http://creazo.fr/mailp.php) :

Mail Nom de la liste Date de désinscription
1 1 1446711923
7 1 1429696268
147 3 1434003094
107 3 1445350534
91 3 1434305513

En soi c'est ce que je veux mais sans les détails ^^, je voudrais avoir le mail dans la colonne mail au lieu de user_id et le nom de la liste au lieu de list_id
Je sais que je ne demande pas les infos correctement mais je n'arrive pas à faire un select avec des jointures entre tables.

<html>
<head>
<title>Ceci est un test</title>
</head>
<body>
<?php
// lancement de la requête (on impose aucune condition puisque l'on désire obtenir la liste complète des propriétaires
$sql = 'SELECT unsub_date, wp_wysija_user_list.user_id , list_id FROM wp_wysija_user_list WHERE unsub_date!="0" ;
';


// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

echo '<table bgcolor="#FFFFFF">'."\n";
// première ligne on affiche les titres prénom et surnom dans 2 colonnes
echo '<tr>';
echo '<td bgcolor="#669999"><b><u>Email</u></b></td>';
echo '<td bgcolor="#669999"><b><u>Nom de la liste</u></b></td>';
echo '<td bgcolor="#669999"><b><u>Date de désinscription</u></b></td>';
echo '</tr>'."\n";


// on va scanner tous les tuples un par un
while($data = mysql_fetch_array($req)) {
echo '<tr>';
echo '<td bgcolor="#CCCCCC">'.$data['user_id'].'</td>';
echo '<td bgcolor="#CCCCCC">'.$data['list_id'].'</td>';
echo '<td bgcolor="#CCCCCC">'.$data['unsub_date'].'</td>';
echo '</tr>'."\n";
}
echo '</table>'."\n";
// fin du tableau.
mysql_free_result ($req);
mysql_close ();
?>
</body>
</html>



Merci à ceux qui pourrait m'indiquer la bonne voie ou le bon select.

Bonne journée !

1 réponse

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
19 déc. 2015 à 14:49
Bonjour,

Regardes donc ce que donnes cette requête
SELECT *
FROM wp_wysija_user_list L
LEFT JOIN  wp_wysija_user U ON U.user_id = L.user_id
LEFT JOIN  wp_wysija_campaign_list C ON C.list_id = L.list_id



=> Je te conseilles de tester tes requêtes DIRECTEMENT dans ta BDD (via phpmyadmin par exemple) AVANT d'essayer de les utiliser via du PHP.
Ca te permet de voir ce que ça donne plus facilement.....


0
CreaZo Messages postés 15 Date d'inscription mercredi 16 septembre 2015 Statut Membre Dernière intervention 24 juin 2016
Modifié par CreaZo le 19/12/2015 à 16:26
Alors c'est vraiment pas mal ! -> http://creazo.fr/mailp.php

Il me manque le nom de la liste ainsi que passer la date en format classique pour que ce soit nickel ! Merci beaucoup !

Je l'ai juste modifier un peu pour n'avoir que les dates qui ne sont pas égales à 0 avec WHERE unsub_date!="0"

SELECT * FROM wp_wysija_user_list L LEFT JOIN wp_wysija_user U ON U.user_id = L.user_id LEFT JOIN wp_wysija_campaign_list C ON C.list_id = L.list_id WHERE unsub_date!="0"


En testant le commande dans phpmyadmin (ce que je vais faire pour chaque test maintenant, tu as raison c'est mieux), j'ai toutes ces colonnes :

list_id
user_id
sub_date
unsub_date
user_id
wpuser_id
email
firstname
lastname
ip
confirmed_ip
confirmed_at
last_opened
last_clicked
keyuser
created_at
status
domain
list_id
campaign_id
filter

On a récupère le numéro de campaign_id, je pense qu'on y presque il nous faut le nom pour y arriver ^^

Par contre je n'aurais pas pu avancé seul, merci encore !
0
CreaZo Messages postés 15 Date d'inscription mercredi 16 septembre 2015 Statut Membre Dernière intervention 24 juin 2016
19 déc. 2015 à 16:33
Petite précision, je souhaite récupérer a quel liste est inscrite les utlisateurs, ces listes sont stockées dans la table wp_wysija_list (oubli de ma part désolé)

Les colonnes de cette table
list_id
name
namekey
description
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
19 déc. 2015 à 16:47
SELECT * 
FROM wp_wysija_user_list L 
LEFT JOIN wp_wysija_user U ON U.user_id = L.user_id 
LEFT JOIN wp_wysija_campaign_list C ON C.list_id = L.list_id 
LEFT JOIN wp_wysija_list WL ON WL.list_id  = L.list_id
WHERE unsub_date!="0"



PS: N'hésites pas, même au sein du code PHP..., de faire des retours à la ligne pour présenter tes requêtes.
Ca les rend plus lisible et donc plus simple à debuguer au cas ou.
0
CreaZo Messages postés 15 Date d'inscription mercredi 16 septembre 2015 Statut Membre Dernière intervention 24 juin 2016
19 déc. 2015 à 16:52
J'ai reussi à faire ceci :

SELECT DISTINCT * 
FROM wp_wysija_user_list L 
LEFT JOIN wp_wysija_user U ON U.user_id = L.user_id 
LEFT JOIN wp_wysija_campaign_list C ON C.list_id = L.list_id 
LEFT JOIN wp_wysija_list X ON X.list_id = L.list_id 
WHERE unsub_date!="0" 
ORDER BY `L`.`unsub_date` DESC


Je suis assez content c'est ce que tu as proposé ! Au top ! Par contre je me rends compte que j'ai des doublons qui vienne de plusieurs campagne faites à plusieurs reprises, je pense que c'est normal, je vais m'attaquer au format de la date maintenant, merci beaucoup à toi !
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > CreaZo Messages postés 15 Date d'inscription mercredi 16 septembre 2015 Statut Membre Dernière intervention 24 juin 2016
19 déc. 2015 à 16:57
Pour les dates :
http://www.w3schools.com/sql/func_date_format.asp
0