MySQL/SQL 检索文本字段的前 40 个字符?

Posted

技术标签:

【中文标题】MySQL/SQL 检索文本字段的前 40 个字符?【英文标题】:MySQL/SQL retrieve first 40 characters of a text field? 【发布时间】:2011-01-06 01:19:54 【问题描述】:

如何从 mysql db 表中检索文本字段,而不是整个文本,只有 40 个左右的字符。

这可以在sql中完成还是我需要使用php来完成?

基本上我要做的是显示前 x 个字符,然后让用户单击它以查看完整内容。

【问题讨论】:

【参考方案1】:
SELECT LEFT(field, 40) AS excerpt FROM table(s) WHERE ...

参见LEFT() 函数。

作为一个经验法则,您永远不应该在 PHP 中做 MySQL 可以为您做的事情。可以这样想:您不想从数据库向发出请求的应用程序传输任何超出严格必要的信息。


编辑 如果您将在同一页面上使用整个数据(即,没有中间请求)比不,没有理由立即获取全文。 (见 cmets 和Veger's answer。)

【讨论】:

用户点击时需要完整版本,所以现在您正在传输更多信息:短字符串完整字符串!从而打破了你自己的经验法则...... @Veger 不一定。您可能是对的,但 OP 只是提到了“点击”——它可能是指向带有全文(例如新闻项目)的页面的链接,在这种情况下,您不想为了生成一个预告片列表。换句话说:鉴于我无法提供最佳最佳方法的详细信息,只需提供一个经验法则(就其性质而言,通常是正确的,但并非总是正确的)。 点击后用户会移动到另一个页面,基本上是在我网站的主页上到论坛帖子。因此,它很像一个新闻页面,您可以点击此处查看整篇文章。 @John 在这种情况下,您可以使用经验法则:在您的主页查询中使用LEFT()【参考方案2】:
SELECT LEFT(MY_COLUMN, 40) FROM MY_TABLE

MySQL参考手册中的功能:

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_left

【讨论】:

【参考方案3】:

试试这个...SELECT LEFT(field name, 40) FROM table name WHERE condition 用于前 40 和 SELECT RIGHT(field name, 40) FROM表名 WHERE 条件 为最后 40

【讨论】:

【参考方案4】:

您可以在 SQL 中执行此操作,就像其他已显示的那样。

但是,如果您想在用户点击时显示全文,您还需要全文,让数据库向您发送简短和完整似乎是一种浪费文本。因此,您可以抓取全文并编写一些代码,以在用户单击时显示短文本和全文。

$result = mysql_query('SELECT text FROM table');
$row = mysql_fetch_row($result);
echo '<div onclick="alert(\''.$row[0].'\');">'.substr($row[0], 0, 40).'</div>';

当然,当你点击它时,你可以做一些更好的事情(而不是alert())。你也可以现在做一些 PHP 检查,看看原件是否短于 40 个字符并处理这样的情况。

【讨论】:

没错!如果要更频繁地使用整个文本,则没有理由一次性获取所有文本。 可能约翰想要短文本,因为用户只想要大多数行的短文本,也许只想要几行的全文?否则,用户将单击以查看包含其他信息的新页面。【参考方案5】:

也检查一下这个,

 mysql_query('SELECT LEFT('your text/fieldname', 40) FROM tablename');

【讨论】:

以上是关于MySQL/SQL 检索文本字段的前 40 个字符?的主要内容,如果未能解决你的问题,请参考以下文章

在电话字段的前 3 个字符(区号)上创建索引?

如何从 Swift 中嵌入 UITableView 的文本字段中检索数据?

用mysql查询出字段中的前几个字

用户在颤动中输入1个字符后如何自动聚焦下一个文本字段

让 Django 仅返回存储为 models.TextField() 的文本的前 50 个字符

sql批量替换及替换某字段的前N个字符