查看完整版本: 從資料庫取得的值輸出時省略相同欄
頁: [1]

allan222 發表於 2017-8-3 09:27 PM

從資料庫取得的值輸出時省略相同欄

舉例來說:
<< SQL 搜尋語法 >>
得到資料如下:
國家    血型    姓名
英國      A      KEN
英國      A      BEN
英國      B      GG
英國      B      YY
美國      O      AMER

那我需要輸出在畫面上的結果是:
國家     血型      姓名
英國       A       KEN   
                      BEN
             B       GG
                      YY
美國       O       AMER

請問要怎麼用出這樣的輸出呢
我嘗試過 在 搜尋語法前 先用變數紀錄會有相同欄位的值
讓它在找下一筆的時候 如果一樣就不輸出
可是這樣會碰到一個問題
就是萬一一次搜尋有好多筆
那就都會輸出那一次重複的了
請各位大大幫幫我 謝謝


...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

allan222 發表於 2017-8-4 04:05 PM

那請問前端要怎麼去操作他呢

allan222 發表於 2017-8-4 08:21 PM

我目前的做法就是如此
我用變數來記錄前一筆
這是我的方法:
假設欄位名稱是國家=country, 血型=blood
我先用變數紀錄
$country = $ac;
$blood = $ac;
然後搜尋
if($country <> $ac)
輸出
else
不輸出
blood亦同

只是就會出現一次兩筆的搜尋結果
所以輸出結果就會如下:
國家 血型 姓名
英國 A KEN
英國 A BEN
      B GG
      B YY
美國 O AMER

由於KEN 和 BEN 的資料是一起出現的 所以他們的資料都被輸出
但GG YY 是第第二次搜尋出來的 所以變數有記錄到 故 國家不輸出 但因為血型不同 所以也都被輸出
請問我有沒有辦法能在一次搜尋中抓到一筆資料來記錄呢?...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

ren1244 發表於 2017-8-5 02:56 AM

猜不出是什麼理由必需一次要一筆資料
但如果原本的寫法已經可以正常輸出
只差部分欄位想要「不顯示」的話
照著原程式碼應該可以有這種懶人改法:if($country <> $ac){
    //輸出
    $country=$ac; //重設$country為新的值
}
else
    //不輸出

shsing1 發表於 2017-8-13 02:28 PM

先用三維陣列存資料,再輸出即可<br><br><br><br><br><div></div>

cswordli 發表於 2017-8-19 08:18 AM

allan222 發表於 2017-8-4 08:21 PM static/image/common/back.gif
我目前的做法就是如此
我用變數來記錄前一筆
這是我的方法:


我來試試,想法如下:
1. 假設從DB取出的每一列資料都放到$DATA的二維陣列中且一定要用sql指定先排序country, blood, name。
2. 在輸出$DATA時做以下小調整:
$rec_country = '';
$rec_blood = '';
foreach( $DATA as $key =>...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

jkl99 發表於 2017-8-23 12:30 AM

本帖最後由 jkl99 於 2017-8-23 12:30 AM 編輯

cswordli 發表於 2017-8-19 08:18 AM static/image/common/back.gif
我來試試,想法如下:
1. 假設從DB取出的每一列資料都放到$DATA的二維陣列中且一定要用sql指定先排序count ...
假設 $LIST 是所有紀錄
$rec = array();
foreach($LIST as $DATA)
{
    $has_rec = (count($rec) >...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

play4140 發表於 2017-10-19 05:54 PM

本帖最後由 play4140 於 2017-10-19 06:23 PM 編輯

如果沒用 sql 先排序的話,使用 array_multisort() 來排序也行,

如果 sql 或  array_multisort() 排序好了,簡單的邏輯如下:

(一)直接使用資料庫 fetch 的資料直接列印: if (count($LIST)){
        $country = '';
        $blood = '';
        foreach($LIST as $DATA){
                $DATA['country'] = $DATA['country'] != $country ? $country = $DATA['country'] : '';
        $DATA['blood'] = $DATA['blood'] != $blood ? $blood = $DATA['blood'] : '';
                        echo implode(",", $DATA)."<br />...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>
頁: [1]