Selection avec jointures entre tables

Résolu
CreaZo Messages postés 15 Statut Membre -  
CreaZo Messages postés 15 Statut Membre -
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 !
--
Jonathan

1 réponse

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    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
    1. CreaZo Messages postés 15 Statut Membre
       
      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
    2. CreaZo Messages postés 15 Statut Membre
       
      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
    3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      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
    4. CreaZo Messages postés 15 Statut Membre
       
      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
    5. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > CreaZo Messages postés 15 Statut Membre
       
      Pour les dates :
      http://www.w3schools.com/sql/func_date_format.asp
      0