MySQL Joindre deux tables avec des valeurs séparées par des virgules

J'ai 2 tableaux ci-dessous

Notes Tableau

╔══════════╦═════════════════╗
 nid          forDepts     
╠══════════╬═════════════════╣
 1         1,2,4           
 2         4,5             
╚══════════╩═════════════════╝

Tableau Des Positions

╔══════════╦═════════════════╗
 id           name         
╠══════════╬═════════════════╣
 1         Executive       
 2         Corp Admin      
 3         Sales           
 4         Art             
 5         Marketing       
╚══════════╩═════════════════╝

Je suis à la recherche d'interroger mes Notes de table et d'associer le " forDepts colonne avec les valeurs du tableau des Positions.

La sortie doit être:

    ╠══════════╬════════════════════════════╣
     1         Executive, Corp Admin, Art 
     2         Art, Marketing             
    ╚══════════╩════════════════════════════╝

Je sais que la base de données doit être normalisé, mais je ne peux pas changer la structure de base de données pour ce projet.

Cela va être utilisé pour exporter un fichier excel avec le code ci-dessous.

<?PHP

    $dbh1 = mysql_connect($hostname, $username, $password); 
    mysql_select_db('exAdmin', $dbh1);


    function cleanData(&$str)
  {
    $str = preg_replace("/\t/", "\\t", $str);
    $str = preg_replace("/\r?\n/", "\\n", $str);
    if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
  }

    $filename = "eXteres_summary_" . date('m/d/y') . ".xls";

    header("Content-Disposition: attachment; filename=\"$filename\"");
    header("Content-Type: application/vnd.ms-excel");
    //header("Content-Type: text/plain");

    $flag = false;


    $result = mysql_query(
    "SELECT p.name, c.company, n.nid, n.createdOn, CONCAT_WS(' ',c2.fname,c2.lname), n.description 
     FROM notes n 
     LEFT JOIN Positions p ON p.id = n.forDepts
     LEFT JOIN companies c ON c.userid = n.clientId
     LEFT JOIN companies c2 ON c2.userid = n.createdBy"
     , $dbh1);



    while(false !== ($row = mysql_fetch_assoc($result))) {
        if(!$flag) {
            $colnames = array(
                'Created For' => "Created For",
                'Company' => "Company",
                'Case ID' => "Case ID",
                'Created On' => "Created On",
                'Created By' => "Created By",
                'Description' => "Description"
            );
            //display field/column names as first row
            echo implode("\t", array_keys($colnames)) . "\r\n";
            $flag = true;
    }


        $row['createdOn'] = date('m-d-Y | g:i a', strtotime($row['createdOn']));

    array_walk($row, 'cleanData');
    echo implode("\t", array_values($row)) . "\r\n";
  }
  exit;

  ?>

Ce code affiche uniquement la première valeur de 'forDepts'

Exa: Exécutif (au lieu de l'Exécutif, le Corp Admin, Art)

Cela peut-il être accompli par CONCAT ou FIND_IN_SET?

S'il vous plaît aider! Merci à l'avance!

  • Si vous ne pouvez pas changer la mauvaise disposition de base de données, vous devriez probablement le fixer à l'EXTÉRIEUR de la base de données, c'est à dire d'une requête sur les données que vous obtenez et d'échanger les codes avec leurs valeurs de texte en PHP avant de les pousser vers le fichier Excel. Malheureusement, le méchant de la base de données de mise en page vous oblige à créer méchant mise en page de fixation code.
InformationsquelleAutor 626 | 2013-09-30