2010-10-08 63 views
1

我正在使用TinyMCE来允许用户写入最终将提交到数据库的内容。mysql检索部分列

TinyMCE包含一个按钮,它将插入一个“分页符”(实际上只是一个HTML注释<!--pagebreak-->)。

我怎样才能在第一次出现分页符“标签”时拉回所有东西?那个标签后面可能会有一些重要的数据,我可能会在之后通过php丢弃这些数据,但似乎我不应该把它带回来。所以我可以将SELECT只是列的一部分,如果我不知道<!--pagebreak-->会有多远?

编辑: 下面的答案不工作,并会带我到任何我需要去..我只是好奇,如果有一个同样简单的方式来处理带回整列,如果它是短暂的因此分页标记不存在。使用以下解决方案,如果未找到分页符,则返回空字符串。

如果没有,那么我可以很容易地在代码中处理它。

+0

在mySQL中查找分页符标记的操作可能与丢弃PHP中其余数据一样昂贵。我个人会坚持使用PHP。 – 2010-10-08 02:47:40

+0

注意到了,但就代码维护而言,我觉得将它全部打包在SQL语句中可能会更好。 – 2010-10-08 02:52:15

回答

2

像这样的东西应该让你的一切到<!--

SELECT SUBSTRING(my_col FROM 1 FOR POSITION('<!--' IN my_col)-1) AS a_chunk 
    FROM my_table 

Reference for string functions

编辑:
只是把OMG小马的话到SQL:

SELECT CASE WHEN position('<!--' IN my_col) > 0 
      THEN SUBSTRING(my_col FROM 1 FOR POSITION('<!--' IN my_col)-1) 
      ELSE my_col END AS a_chunk 
    FROM my_table 

这听起来像你还需要对文本的长度进行检查;是否存在分页符。你可以使用CHARACTER_LENGTH()

+0

+1:这正是我的想法 - 只是一个简单的子串处理,使用POSITION或LOCATE ...它甚至可以*格式化*就像我写的一样! – 2010-10-08 02:56:34

+0

有没有办法处理可能没有分页符的短输入? – 2010-10-08 03:39:36

+0

这不是我在测试中看到的。看起来好像是没有分页符,返回一个空字符串。 – 2010-10-08 04:03:36

1

为什么不在你的mysql表中创建另一列来存储<!--pagebreak-->所在位置的整数值。您将在脚本中计算此值,并在插入由tinymce生成的html时同时存储此值。

然后在稍后的检索中,使用该列中的值来选择从1直到该值的子字符串。这应该使您的查询更简单,也许可以提高查询性能?