簡體   English   中英

在一列Mysql和PHP中顯示多行

[英]Display multiple rows in one column Mysql and PHP

我試圖在一列中顯示多個行值。 我正在使用由一對多關系組成的4個表。 我已經用所需的數據構建了一個查詢,我不確定問題是在這里還是實際上在PHP方面。 我已包含一些代碼,因此您可以了解一下。 老實說,我可能需要在一段時間后使用GROUP BY或包含一個foreach循環才能獲得所需的結果。 如果有人可以指出正確的方向或指導我解決問題,將不勝感激。

我可以使用GROUP BY category_name停止類別重復,但是Im的subCat_name不能顯示所有結果。 僅顯示第一行。 它應在主類別名稱下顯示所有subCat_name

目前得到這個

Ideas (category_name)

Shop More( subCat_name)
Have a better wardrobe(subCat_description)

但這應該像

Ideas (category_name)

Shop More( subCat_name)
Have a better wardrobe(subCat_description)

Build a Blog( subCat_name)
Share Ideas(subCat_description)

Travel to NYC( subCat_name)
Book a holiday(subCat_description)

MySQL查詢

$query = 'SELECT project_users.*, project.project_name, category.category_name,     sub_category.subCat_name, sub_category.subCat_description 
FROM project_users 
JOIN project 
ON project.project_id = project_users.project_id 
JOIN category 
ON category.project_id = project.project_id 
JOIN sub_category 
ON sub_category.category_id = category.category_id';

的PHP

$result = mysqli_query($link, $query);

if($result) {

    while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {

        echo '<!-- category container for tasks-->
              <div class="col-lg-4 category">
               <section class="panel">
                <div class="panel-body">
                 <header class="to-do-head">';
            echo '<h3>' . $row['category_name'] . '</h3>';
            echo ' <a class="to-do pull-right"><i class="icon-plus"></i> Add Task</a>';
            echo '</header>';
            echo '<div class="col-lg-12 task"><!--open task-->';
            echo '<div class="panel-body">';
            echo '<h4>' . $row['subCat_name'] . '</h4>';
            echo '<p>' . $row['subCat_description'] . '</p>';
            echo '</div><!--close panel-body-->';
            echo '<div class="task-foot">';
            echo '<a href=""><i data-original-title="Add Action" class="icon-legal tooltips"></i></a>
                                 <p class="pull-right"><i class="icon-calendar"></i> 16th Jan 2014</p>
                                   </div><!--close task foot-->';
            echo '</div><!--close-lg-12 task-->';
            echo '</div><!--close panel body-->
                  </section><!--close panel-->
                  </div><!--col lg 4 close container for tasks-->'; 

    }//end while

您需要一些基本的邏輯來檢測類別何時更改,並為此輸出適當的html。 例如

$old_cat = null;
while($row = mysqli_fetch_array(...)) {
   if ($row['category'] != $old_cat) {
       ... output category header ...
       $old_cat = $row['category'];
   }
   ... output subcategory stuff here ...
}

編輯:為MySQL更新

抱歉,沒有注意到這是MySQL。 當然,GROUP_CONCAT是LISTAGG的替代品(而且更容易)。 我在使換行符起作用時遇到了麻煩(據我所知,'\\ r \\ n'或CHAR(13,10)應該給出換行符,但是SQLFiddle中沒有運氣)。

換行符: http : //www.askingbox.com/tip/mysql-line-breaks-in-mysql

GROUP_CONCAT分隔符示例: MySQL中的聚合函數-列表(如Oracle中的LISTAGG)

這是我想出的:

SELECT
    category.category_name || CHAR(13, 10)
    || GROUP_CONCAT((sub_category.subCat_name || CHAR(13,10) || subcat_description 
         separator CHAR(13,10)) -- if the separator gives trouble, remove it, use a REPLACE() function around the GROUP_CONCAT, and replace ',' with CHAR(13, 10)
    as list

FROM 
    project_users 
    JOIN project ON project.project_id = project_users.project_id 
    JOIN category ON category.project_id = project.project_id
    JOIN sub_category ON sub_category.category_id = category.category_id

Group By 
    category.category_name

我不確定這是否行得通。 嘗試使用分隔符功能時,我得到的輸出是一個錯誤,或者在使用任何類型的換行符時,該行的輸出為'0'。 向我報告,讓我知道,以便我可以根據需要刪除或更改答案。


(上一個答案,對ORACLE有利)

為了在一行中顯示column_X的多行,使用SQL時,以下方法可能是一個有用的解決方法。 使用LISTAGG和換行符chr(10)將是您的朋友。

Column Y      Column X
 1             a
 1             b
 1             c
 1             d
 2             foo
 2             bar

SELECT column_Y, LISTAGG(column_X, chr(10)) WITHIN GROUP (ORDER BY column_X) 
FROM table
GROUP BY column_Y

輸出量

Column Y      Column X
 1             a
               b
               c
               d
 2             foo
               bar

如果您喜歡此方法,那么這里是一個帶有其他示例的網站,可幫助您入門:

http://www.techonthenet.com/oracle/functions/listagg.php

編輯:

我以為我還會提到XMLELEMENTXMLAGG的使用。 它是為XML設計的,但也可以與HTML一起使用,因為它們都使用標簽。 我不經常使用它,所以我不能給您一個很好的例子,但是文檔(請參閱以下鏈接)很好地向您展示了XMLAGG的強大功能。 您也可以在線查找其他示例:

http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions215.htm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM