官方的相關(guān)鏈接不靈活,樣式不能任意的修改無法跨表。很多人想跨表做相關(guān)鏈接,比如news和info都有幾篇文章,關(guān)鍵詞都有'北京',那么如何調(diào)用這些有有同一關(guān)鍵詞的文章呢?為此寫了一個(gè)函數(shù)。小范圍的調(diào)用于本分類,稍大一點(diǎn)范圍可以調(diào)用同一表的文章,再大一點(diǎn)可以調(diào)用指定的表的文章??梢赃x要調(diào)用文章的數(shù)量。 其實(shí)還可以升級(jí),比如指定調(diào)用某個(gè)表的文章數(shù)量,那個(gè)表的順序等。 函數(shù)沒有樣式,稍微懂一點(diǎn)代碼的可以自行修改。其實(shí)不是特別難。 如果有哪位升級(jí)了這個(gè)函數(shù),可以共享給大家。
fetch1("select?tagid,tagname,num,isgood,cid?from?{$dbtbpre}enewstags?where?tagname='".$tag_all[$i]."'?order?by?tagid?limit?1")?;
????????$tag_id[$i]=$r_1_1['tagid']?;????????//tag的ID
????????$tag_num[$i]=$r_1_1['num']?;????????//tag下的文章數(shù)量
????????if($tag_num[$i]>=$eq_num){//如果TAG下的文章數(shù)量比平均的數(shù)量大或者等于,那么TAG的文章數(shù)量取平均值
????????$tag_num[$i]?=?$eq_num?;//重新賦值
????????}else{//如果TAG下的文章小于平均值,那么TAG取原有的文章數(shù)量。同時(shí)重新賦值平均值。
????????$eg_tag=?$eq_num-$tag_num[$i]?;
????????$eq_num?+=?$eg_tag?;
????????}
????????//比如說有3個(gè)TAG,每個(gè)TAG下有4篇文章,現(xiàn)在指定要顯示10篇文章,那么每個(gè)TAG要拿出4篇,共有12篇文章
????????//3個(gè)TAG,每個(gè)TAG下有3篇文章,現(xiàn)在指定要顯示10篇文章,那么每個(gè)TAG要拿出3篇文章,共有9篇文章
????????//3個(gè)TAG,A有2篇文章,B有5篇文章,C有3篇文章,現(xiàn)在要顯示10篇文章,那么A拿出2篇文章,B拿出5篇文章,C拿出3篇文章,共有10篇文章
????????//如果?A、B、C中除了當(dāng)前文章,還有相同的文章,那么會(huì)扣除重復(fù)的那篇文章,只取一次。所以指定的數(shù)量會(huì)有偏差
????????for($i_n=0;$i_nquery("select?tid,classid,id,mid?from?{$dbtbpre}enewstagsdata?where?tagid='".$tag_id[$i]."'?order?by?classid?");
????????$ri=1?;
????????????????while($r=$empire->fetch($sql))
????????????????{
????????????????$tbname_all[$r['tid']]=$class_r[$r['classid']]['tbname']?;
????????????????if($tbname_all[$r['tid']]==$tbname_num[$i_n]?&&?$ri?<=?$tag_num[$i]?&&?$navinfor['classid']!=$r['classid']?&&?$navinfor['id']!=$r['id']){
????????????????if($ck==1&&$navinfor['classid']==$r['classid']){
????????????????
????????????????$tbname_all_r[$r['tid']]=$class_r[$r['classid']]['tbname']?;
????????????????$classid_id[$r['tid']]=$r['classid']?.?'_'?.?$r['id']?;
????????????????$classid_all[$r['tid']]=$r['classid']?;
????????????????$id_all[$r['tid']][$r['classid']]=$r['id']?;
????????????????
????????????????}elseif($ck==2&&$class_r[$navinfor['classid']]['tbname']==$class_r[$r['classid']]['tbname']){
????????????????
????????????????$tbname_all_r[$r['tid']]=$class_r[$r['classid']]['tbname']?;
????????????????$classid_id[$r['tid']]=$r['classid']?.?'_'?.?$r['id']?;
????????????????$classid_all[$r['tid']]=$r['classid']?;
????????????????$id_all[$r['tid']][$r['classid']]=$r['id']?;
????????????????
????????????????}elseif($ck==3){
????????????????
????????????????$tbname_all_r[$r['tid']]=$class_r[$r['classid']]['tbname']?;
????????????????$classid_id[$r['tid']]=$r['classid']?.?'_'?.?$r['id']?;
????????????????$classid_all[$r['tid']]=$r['classid']?;
????????????????$id_all[$r['tid']][$r['classid']]=$r['id']?;
????????????????
????????????????}
????????????????$ri++;????????
????????????????}
????????????????}
????????}
????????}
????????$classid_id_x=array_unique($classid_id);//去除重復(fù)的值
????????//去除重復(fù)的值,不同的TAG會(huì)有相同的文章。所以去除重復(fù)的值。比如A篇文章里面都有"北京","奧運(yùn)",兩個(gè)關(guān)鍵詞,B篇文章里面也有"北京","奧運(yùn)"在不去除重復(fù)的情況下,A篇的相關(guān)鏈接會(huì)出現(xiàn)兩次B文章。所以必須去除其中一個(gè)。
????????arsort($classid_id_x);?//按鍵名排列,倒序
????????$tid_tid=array_keys($classid_id_x)?;//取出鍵名重新排列,鍵名即為TAG的ID:tid
????????shuffle($tid_tid);//順序打亂,重新排
????????$tid_tid_num=count($tid_tid)?;
????????if($num<$tid_tid_num)?$tid_tid_num=$num+1?;//由于去除了本文章,所以再加一條彌補(bǔ)
????????for($i_tid=0;$i_tid<$tid_tid_num;$i_tid++){
????????$tid=$tid_tid[$i_tid];
????????$classid=$classid_all[$tid];
????????$id=$id_all[$tid][$classid];
????????if($id==$navinfor['id'])?continue?;?//如果是本文章,相關(guān)鏈接里面就不用再放了。
????????$tbname=$tbname_all_r[$tid];
????????$r_1_2?=$empire->fetch1("select?title,smalltext,titleurl,dp_jt,dp_dwz?from?{$dbtbpre}ecms_$tbname?where?id='".$id."'?order?by?newstime?limit?1")?;
????????////////顯示樣式在這修改
?????????echo?$r_1_2['title'].'?'?;
????????////////
????????}
????????}????????
?>
/**
**/
版權(quán)聲明: 本站資源均來自互聯(lián)網(wǎng)或會(huì)員發(fā)布,如果侵犯了您的權(quán)益請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)刪除!謝謝!
轉(zhuǎn)載請(qǐng)注明: 帝國(guó)CMS跨表查詢相關(guān)文章的方法