0

私はこのSQLステートメントを3つのテーブルに結合しています:

SELECT * FROM `int_news` 
                       LEFT JOIN tl_member ON int_news.member_id = tl_member.id
                       LEFT JOIN tl_news ON int_news.news_id = tl_news.id

3つのテーブルは次のようになります。

表1(int_news)ID、member_id、news_id

表2(tl_member)id、firstname、lastname

表3(tl_news)id、見出し

これまでのところ良いのですが、頭の中に大きなブラックホールがあり、このような結果を出力する方法を解決できないようです。

「見出し」ごとに、すべての姓が必要です。

headline 1       Jonny
                 Walker
                 Jim

headline 2       Knopf
                 Jon
                 Doe
4

3 に答える 3

1

ピボットのように聞こえるので、見出しでクエリをグループ化すると、各姓が列として表示されます。

http://www.artfulsoftware.com/infotree/queries.php#78に役立つ可能性のあるmysqlのピボットに関するこの優れたチュートリアルを見つけました。

headline 1       Jonny    Walker    Jim

headline 2       Knopf    Jon       Doe

これはそれを行うループです*しばらくしてから私のphpを許してください。

$curHeadline = "";

while ( $db_field = mysql_fetch_assoc($result) ) {

    if($curHeadline != $db_field['headline'])
    {
        $curHeadline = $db_field['headline'];
        print $curHeadline . $db_field['ID']
    }

    print $db_field['lastName'] . "<BR>";
}
于 2013-01-13T23:04:45.970 に答える
-1

このようなものはあなたの状況を漠然と反映していますか?

<?php

$sql = "
    SELECT
        `int_news`.`ID` AS `int_news_ID`, 
        `int_news`.`member_id`, 
        `int_news`.`news_id`, 
        `t1_member`.`id` AS `t1_member_id`, 
        `t1_member`.`firstname`,
        `t1_member`.`lastname`,      /* desired */
        `t1_news`.`id` AS `t1_news_id`, 
        `t1_news`.`headline`         /* desired */
    FROM
        `int_news` 
    LEFT JOIN `tl_member` ON `int_news`.`member_id` = `tl_member`.`id`
    LEFT JOIN `tl_news` ON `int_news`.`news_id` = `tl_news`.`id`
";

$res = mysql_query($query);

$arrHeadings = array();
while($row = mysql_fetch_assoc($res)) {
 // We want to output the results in groups of headings
 $arrHeadings[$row['heading']][] = $row;
}

// Don't forget to cleanse for html output (unlike below)
// Loop through the headers
foreach($arrHeadings as $heading=>$arrRow) {
 echo '<dl>';
 echo '<dt>'.$heading.'</dt>';
 echo '<dd>';

 // Loop through rows with the same header
 foreach($arrRow as $index=>$dbRow) {
  echo $dbRow['lastname'].'<br />';
 }

 echo '</dd>';
 echo '</dl>';
}

?>
于 2013-01-13T23:22:52.840 に答える
-1

mysql でこれを試してください:

SELECT tlnews.headline, GROUP_CONCAT(tl_member.last_name)
FROM `int_news`  LEFT JOIN tl_member ON int_news.member_id = tl_member.id
                 LEFT JOIN tl_news   ON int_news.news_id   = tl_news.id
GROUP BY 1;

Expected Output:

headline1  Johnny,Walker,Jim
headline2  Knopf,Jon,Doe
...
于 2013-01-13T23:44:24.123 に答える