2010-02-20 12 views
12

我希望能夠從數據庫字段中拉出第一個X字以用於預覽。基本上如果一個字段的內容是從mySQL中拉出第一個X字(不只是字符)

"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris malesuada." 

我想呼應

"Lorem ipsum dolor sit amet... see more" 

什麼是做到這一點的最好方法是什麼?

我知道做的是拉在查詢整場然後像做

$foo = [query_results]; 
$bar = explode(' ', $foo); 
for($x=0, $x<6, $x++){ 
    echo $bar[$x]; 
}; 
echo "... see more" 

是否有這更好的方法唯一的事情嗎?

+1

假設總是有至少六個單詞? – 2010-02-20 04:23:31

+0

好吧,這是半天的時間。是的,這個解決方案總是假設6個字。我明顯會提出一些更好的代碼,以解決更少的可能性。 – 2010-02-20 04:38:56

回答

14

你一定要使用SUBSTRING_INDEX將返回字符的一定數量的直到根據分隔符的出現實現指定的計數爲止。在你的情況下,呼叫是這樣的:

SELECT SUBSTRING_INDEX(text_field, ' ', 6) FROM ... 

特別是,這將返回多達六個在這裏我們定義了一個字作爲一組不使用空格分隔,空格字符。

注意:這將返回最後一個單詞的標點符號,這可能會或可能不需要。它很容易替換PHP中字符串尾部的任何標點符號,但是如果你想完全保留在SQL中,我認爲你可以使用TRIM。該語法會是這樣的:

SELECT TRIM(TRAILING ',' FROM SUBSTRING_INDEX(text_field, ' ', 6)) FROM ... 

有可能是用於去除拖尾的標點符號一個更好的選擇 - 但也許是另外一個問題(我還在尋找比TRIM更好的解決方案)。

+0

將您標爲回答並解釋爲什麼是答案的答案。萬分感謝! – 2010-02-20 04:39:59

0

方法1(更好):

不,你也可以使用mysql的substring功能所需的文本直接從外地獲取。

原型:

SUBSTRING(string,position) 

例子:

SELECT SUBSTRING(field, 25) FROM table 

方法2:

您也可以使用PHP的substr功能出於同樣的目的,但首先你會必須選擇wh來自db的ole字段值。

$cutted = substr($row['fieldname'], 0, 25) . '.....'; // get 25 chars and append .... 

你的情況:

$str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris malesuada."; 
$parts = explode(" ", $str); 
print $parts[0] . ' ' .$parts[1] . ' ' .$parts[2] . ' ' .$parts[3] . ' ' .$parts[4] . '.....See More'; 

輸出:

Lorem ipsum dolor sit amet.....See More 
+0

OP要求提供一個解決方案來計算和限制單詞(基於空格分隔)*不是*字符! – 2010-02-20 04:29:12

0
SELECT SUBSTRING(`Filed_Name`,1,X) FROM `Table` where field2 = 0 

頭可以通過你需要顯示的字符替換子條款X。

+0

除OP需要顯示*詞*不是字符... – 2010-02-20 04:34:27

5

好,你可以使用字符串函數

SELECT CONCATENATE(SUBSTRING(myfield, 0, N), "... see more") FROM mytable 

,將讓你在第一N個字母......

做它在您的查詢,如果你真的想要得到的第一N個字,你定義詞爲「由空格分隔」,你仍然可以做到這一點在查詢如下

SELECT CONCATENATE(SUBSTRING_INDEX(myfield," ", N), "... see more") FROM mytable 
+0

它是CONCATENATE還是CONCAT?對我來說,如果我使用CONCAT而不是CONCATENATE,那麼情況就會起作用。我正在使用MySql。 – Norman 2013-01-09 04:34:42

0

我的理念是,不要讓數據庫工作太辛苦。根據我的經驗,當您爲真正簡單的查詢提供數據時,MySQL會更快,然後使用PHP或您正在使用的任何語言進行「真正」的工作。我不會遵循任何發佈的建議 - 抓住整個字符串,然後用腳本語言或選擇將其縮小。唯一的例外是如果字符串可能非常大 - 例如50KB或更多。在這種情況下,讓數據庫縮小它可能會更快。但是,真的,除非你每秒處理數千個這樣的查詢(如果你是做錯了 - 使用某種緩存),那麼我認爲沒有任何理由讓數據庫這樣做您。

0
<?php 
    echo "<h3>".$this->consult['page_caption']."</h3> 

     "; 
    $txt=array(); 
    $txt = explode(" ",html_entity_decode($this->consult['page_content'])); 
    $record = array(); 
    $k =count($txt); 

    for($x=0;$x<=30;$x++){ 
     if( $x < $k){ 
      //if($txt 
      $record[] = $txt[$x]; 
     } 
    } 

    $outdata =implode(" ",$record); 
    echo "<p>".$outdata." <a href='#'> more&raquo;</a></p>"; 
    // html_entity_decode($this->consult['page_content']) 
?> 

認爲這也會有幫助。我在我的索引頁上使用它來獲得部分內容,並鏈接到文章的主頁。

相關問題