我的文章系統,想按照多個件條下
,看看有什麼可能性可做到
4張表 基礎簡介
content 文章主表
id
lid = 相關的文集id ,儲存格式 (1,2,3)
tags = 相關的TAG 的ID ,儲存格式 (1,2,3)
typeid = 分類ID 只為1個數字
文集
lid
name
Tags
id
name
分類
typeid
name
typeid = 分類ID, 不別多說
tag = 標籤這不用多說,
lid = 一個文集, 但一篇文章可以放到多個文集, 比如: PHP+MYSQL+AJAX無重新整理評論
使用者可能放到 PHP文集,MYSQL文章,AJAX文集
TAG 是全站共用,重複就不新增,只會選擇
所以不能做成一個自己文章的分類列表,所以會出現了文集功能
因為文章某個部分已經會顯示當前文集其他的文章
所以在關相文章的部分,文集中的檔案不比TAG文章更應該排在前面
所以準備的關係排名是
1. TAG相關
2. 文集
3. 最新的當前分類文章
為什麼要分3次???
因為我就是怕太TAG,同時又沒有用到文集功能....
所以最後一步才是當前分類文章
當前文章的
TAG 是3,14
lid = 7,12
typeid = 2
SELECT * FROM `content` WHERE `tags` IN (3,14) ORDER BY `time` DESC LIMIT 10
SELECT * FROM `content` WHERE `lid` IN (7,12) ORDER BY `time` DESC LIMIT 10
SELECT * FROM `content` WHERE `typeid` = '2' ORDER BY `time` DESC LIMIT 10
前台顯示十條相關文章
本來是準備,分3次,然後每次拿10條是最安全的
後來想想...這樣還有合并數組什麼的也麻煩,重點是取太多資料,但前台只需要10條
所以換成一句
SELECT * FROM `video_content` WHERE `tags` IN (3,14) or `lid` IN (3) or `typeid` = 2 LIMIT 10
但這樣好像又能以TAG>文集>分類...去排名
請求一下有何方法?
要求好像蠻麻煩的呵呵,因為頁面下半部有50%的部分是顯示相關文章,所以在營運上很重要
回複討論(解決方案)
暫時用了這一段代碼,感覺有點蠢
有什麼更好的方法建議呢?
//相關文章if (!empty($data["tags"]) || !empty($data["lid"])) {$tags = $data["tags"];$lid = $data["lid"];$tag_sql = "SELECT * FROM `content` WHERE `tags` IN ($tags) OR `lid` IN ($lid) ORDER BY `time` DESC LIMIT 8";$stmt = $pdo->prepare($tag_sql);$stmt->execute();$tags_v = $stmt->fetchAll(PDO::FETCH_ASSOC);$smarty -> assign("r_v",$tags_v);}$tags_num = count($tags_v);if ($tags_num < 8 ) {$now_v = "";foreach ($tags_v as $key => $value) { $now_v .= $value['vid'].",";}$now_v=substr("$now_v",0,-1);$need = 8-$tags_num;$typeid = $data["typeid"];$typeid_sql = "SELECT * FROM `content` WHERE `typeid` = '$typeid' AND `vid` NOT IN ($now_v) ORDER BY `time` DESC LIMIT $need";$stmt = $pdo->prepare($typeid_sql);$stmt->execute();$typeid_v = $stmt->fetchAll(PDO::FETCH_ASSOC);$smarty -> assign("r_tv",$typeid_v);}
sql用or、not in本來就不好;
如果資料不需要太及時的話
把你3條sql語句組合好的資料緩衝一段時間(半小時、一小時、甚至再長一點也可以)
因為你的資料都是死資料,沒有瀏覽量,評論量等等
sql用or、not in本來就不好;
如果資料不需要太及時的話
把你3條sql語句組合好的資料緩衝一段時間(半小時、一小時、甚至再長一點也可以)
因為你的資料都是死資料,沒有瀏覽量,評論量等等
謝謝
這個我也瞭解
但更想知道的是,如果按照更有關的排得更前
就是先排TAG 再排LID 最後再排同類其他文章
莫非只能用二樓的方法?
你的 意思是不是如果要10條tag,就先取10條tag,不夠再取有lib,接著不夠再取有type的?
如果是這樣的話, 你的sql是不是會有問題!
你的 意思是不是如果要10條tag,就先取10條tag,不夠再取有lib,接著不夠再取有type的?
如果是這樣的話, 你的sql是不是會有問題!
是的
2樓暫時做了個簡單的
暫時先不分tag和lid
不夠再取type
以及2樓用8條做測試
是否有更好的做法?
用全文檢索索引來做