緊急啊.我被遞迴給鬱悶死了.請大家幫我一下

來源:互聯網
上載者:User
首先.我的[欄目]表結構是這樣的
id uid titile class
1 0 首頁 url
2 0 新聞 news
3 0 產品 url
4 3 科技產品 product
5 4 電腦 product

現在的問題的 我想做一下 無限級的下拉框

用遞迴的方法,可以實現 where uid = 0 開始迴圈 然後 get_str($row['id']); 遞迴


但是問題來了. 因為我的欄目 有一個CLASS欄位 表示欄目類型...url表示外部連結 news表示新聞 product表示產品欄目

一級產品首先是一個外部連結類型的..他的下級欄目 是產品類型的
我在後台發布產品的時候.選擇歸屬欄目的時候..............應該只把 class=prodcut和他的下級全部顯示出來
那麼我用遞迴的方法 在SQL加上條件陳述式 where class='product'

這樣的話 沒辦法往下遞迴啊...... 因為這個條件 如果不遞迴的話 就顯示 科技產品 電腦

我在網上找的歸遞代碼 都是UID 從 0開始的..........如果我 where class='product' 加上這個條件 那麼科技產品的UID是3或者是其它數字 比如56789 也可能是0

這樣就沒辦法遞迴啊...直接什麼也不顯示了...有什麼好法方嗎? 不知道我說的清不清楚.


回複討論(解決方案)

列出 class=prodcut和他的下級 時,就不是從 where uid = 0 開始了
對你樣本的資料就是從 where uid = 3 開始

所以你應該先獲得起點的 id,然後再遞迴

列出 class=prodcut和他的下級 時,就不是從 where uid = 0 開始了
對你樣本的資料就是從 where uid = 3 開始

所以你應該先獲得起點的 id,然後再遞迴



求大神.幫幫我吧,,,幫我寫一個我這個要求的 無限分類 的代碼好嗎

論壇是交流的地方,要代碼請左轉威客網

function foo($uid=0, $ext='') {  $sql = "select * from tbl_name where uid=$uid" . ($uid && $ext ? " and class='$ext'" : '');  $rs = mysql_query($sql);  while($row = mysql_fetch_assoc($rs)) {    foo($row['id'], $ext);  } }

function foo($uid=0, $ext='') {  $sql = "select * from tbl_name where uid=$uid" . ($uid && $ext ? " and class='$ext'" : '');  $rs = mysql_query($sql);  while($row = mysql_fetch_assoc($rs)) {    foo($row['id'], $ext);  } }




function foo($uid=0, $ext='') {
$sql = "select * from column where uid=$uid" . ($uid && $ext ? " and class='$ext'" : '');
$rs = mysql_query($sql);
while($row = mysql_fetch_assoc($rs)) { 這行報錯啊
echo $row['id'];
foo($row['id'], $ext);
}
}

echo foo(0, "product") ;

哥哥

報的什麼錯?

報錯我解決了

但是這個還是必須是 UID 從0開始啊..

如果UID是空 那麼class='$ext' 就報錯啊

foo(3, "product")
不就從 產品 下面開始了嗎?

要不要 product 無所謂

現在的問題是 這個 3 不是固定的啊

比如我的欄目有 首頁 新聞 產品 視頻

那麼我在後台 發布產品的時候., 可選欄目中 只把產品欄目列出來啊/

那麼 欄目中 可能有 多個 產品欄目.... 用於區分欄目類型 就靠 class欄位中的值 比如product 表示全部是產品欄目

不用遞迴呢 可否實現

我一開始就講了,既然你試要從某一個節點開始,就要先找到這個節點
無論這個節點存放在什麼位置,都可以按其唯一的屬性找到他

是啊.大哥

可是我不會從節點開始迴圈啊......怎麼辦,,,百度很多資料了.全是遞迴的

function foo($uid,$class=''){    if($class==''){        $sql = "select * from table where uid='".$uid."'";    }else{        $sql = "select * from table where uid='".$uid."' and class='".$class."'";    }    $query = mysql_query($sql) or die(mysql_error());    while($result = mysql_fetch_assoc($query)){        echo $result['id'].' '.$result['title'].'
'; foo($result['id'],$result['class']); }}foo(0);

你能從根節點上遞迴,不就能從子節點上遞迴嗎?
有什麼區別呢?

用遞迴還是不用遞迴,這取決於你的需要。我在精華區有好幾個文章,你可以先看看

你能從根節點上遞迴,不就能從子節點上遞迴嗎?
有什麼區別呢?

用遞迴還是不用遞迴,這取決於你的需要。我在精華區有好幾個文章,你可以先看看




協助我太多了.把分給您了

後來我自已用別的思路解決了.
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.