【问题标题】:retrieving only part of the record in database仅检索数据库中的部分记录
【发布时间】:2011-05-06 04:45:57
【问题描述】:

我有一个数据库,其中包含一些主题,每个主题都有一个标题和一些描述。在标题页中,我必须显示该主题的所有标题和几行描述。当用户点击一个主题时,他会被带到一个页面,在那里他可以找到完整的描述。就像 stackoverflow 网站一样,每个问题的描述都简短地显示出来。

我想知道有没有一种方法可以直接从数据库中检索这样的简短描述,或者前端是否应该解析检索到的记录并相应地截断它?有没有办法直接从数据库中查询简短版本的记录。我使用 MySql 作为我的数据库和 php 来显示网页。

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:
    SELECT SUBSTRING(`title`, 0, 100) FROM `topics`
    

    【讨论】:

    • 但是,这样做会导致您在中间截断单词。除非您可以显示半个单词,否则您可能应该走得更远。
    • 我认为有完整的单词更好。
    【解决方案2】:

    我想说答案在这篇文章中找到: SQL Server substring breaking on words, not characters

    你不想只限制字符串长度,因为那样你可能会在中间截掉一个单词。相反,您可能希望设置最大长度,然后移回有空格的地方。

    另一种选择是运行一次,然后更新表中存储截断文本的字段。这样一来,您可以限制额外的 SQL 调用,同时仍然拥有格式良好的摘要文本。

    【讨论】:

      【解决方案3】:

      最佳解决方案:

      SELECT SUBSTRING_INDEX('your string', ' ', 10);
      

      这将返回您的字符串最多 10 个空格。

      注意: SUBSTRING 会导致您按照@BiggsTRC 的建议截断中间的单词

      Reference

      【讨论】:

        【解决方案4】:
          select LEFT (description, CHARINDEX(' ', description, 50) ) from topics
        

        这似乎正确地解决了我的问题......无论如何感谢所有答案。

        【讨论】:

          【解决方案5】:

          您是指文本字段中的一段文本吗?

          点赞select left(LongTextField,200) from myTable

          【讨论】:

            【解决方案6】:

            您可以通过这样的强制转换来限制返回的值: select title, cast(description as varchar(300)) from table

            或者您也可以将不那么粗糙的截断描述存储为 smallDescription 或表格中的任何内容(然后让您的前端让您标记它并为您剖析它^^)。

            【讨论】:

              猜你喜欢
              • 2021-10-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-06-13
              相关资源
              最近更新 更多