2010-02-20 31 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']) 
?> 

认为这也会有帮助。我在我的索引页上使用它来获得部分内容,并链接到文章的主页。

相关问题