2011-12-20 24 views
0

我希望SQL从简单的单个MySQL表中检索文本数据,其中字段中的每个(空格分隔的)字都加倍/立即重复在结果中。用于从MySQL中检索文本数据的SQL语句与重复字段中的每个字

样品表

+--------------------+ 
| text_data   | 
+--------------------+ 
| The man walks.  | 
| Apple pie.   | 
| This is a sentence | 
+--------------------+ 

所需的输出。

+---------------------------------------+ 
| output        | 
+---------------------------------------+ 
| The The man man walks. walks.   | 
| Apple Apple pie. pie.     | 
| This This is is a a sentence sentence | 
+---------------------------------------+ 

的话的顺序是重要。

编辑1:由于应用程序层(上下文是Sphinx中的索引生成)和源数据不断变化的特性,这必须在SQL(无临时表,无php)中动态完成。

编辑2(更详细的上下文):我希望Sphinx中的wordforms功能可以非破坏性地处理某些字对。也就是说,如果我将“playstation 3”变成“playstation playstation 3 3”,我仍然可以应用“playstation 3> ps3”这个词,并且实际上文章可以通过查询“playstation”和“ps3” 。如果我不双击,但仍应用wordform,那么我失去了通过搜索“playstation”来检索文章的能力。

+0

这对于像PHP这样的语言来说会更容易一些。你必须在SQL中完成吗? – 2011-12-20 22:44:37

+0

是的 - 编辑的问题反映了这个 – Riedsio 2011-12-20 22:47:06

+0

你可以从这开始 - http://stackoverflow.com/questions/1096679/can-mysql-split-a-column接受的答案有一个链接到一个已写入的MySQL函数 – 2011-12-20 22:51:32

回答

0

我不确定我会选择sql作为我的第一语言来做到这一点,但如果我必须解决这个问题,我会的。

  1. 创建一个拆分函数,返回一个表,如果我还没有一个方便。
  2. 将表格中的每条记录都更新为单词加上本身。
  3. 将表中的所有记录选择为连接结果。

让我知道如果这些步骤中的任何一个都不够明确。

+0

与你的答案相关第一步[你可以在MySQL查询中拆分/爆炸一个字段吗?](http://stackoverflow.com/questions/471914/can-you-split-explode-a-field-in-a- mysql-query) – 2011-12-20 22:52:00

+0

上下文不允许临时结构或其他层中的处理。我的问题被编辑以反映这一点。 – Riedsio 2011-12-20 22:52:09

0

你可以编写自己的功能来做到这一点。这里有第一种方法。请注意,这只是一个模板,你应该编码位:

DROP FUNCTION IF EXISTS REPEAT_WORD 
DELIMITER // 
CREATE FUNCTION REPEAT_WORD(
    X TEXT 
) 
RETURNS TEXT 
BEGIN 
    DECLARE Y TEXT, PAROLE VARCHAR(255); 
    WHILE INSTR(X, ' ') > 0 DO 
     SET PAROLE = get first word from X 
     SET Y = Y + ' ' + PAROLE + ' ' + PAROLE 
     SET X = remove PAROLE from X ... 
    END WHILE; 
    RETURN Y; 
END 
// 

然后用功能选择:

select REPEAT_WORD(text_data) as `output` 
from table 
+0

这对你有帮助吗?你需要帮助来完成功能吗? – danihp 2011-12-21 06:55:29

1

有几个选项...

  1. 你可以使用XMLpipe/2索引方法来索引sphinx的数据。然后你可以在索引期间使用任意的(PHP等)代码。这样你可以使用PHP来解决你的特定问题。 http://sphinxsearch.com/docs/current.html#xmlpipe2

  2. 如果你有一个小词形等文件,你可能只是硬编码的具体情况到MySQL

    sql_query = SELECT id,REPLACE(text_data, 'playstation 3', 'playstation playstation 3 3') AS text_data,.... 
    

    (可能使用嵌套REPLACE(...)调用)

    (如果情况是一个问题,也许可以使用的preg_replace UDF)

加倍所有的话,似乎是一个不好的想法,因为这将打破狮身人面像排名和能力搜索三个+短语术语(没有一些黑客)。所以使用xmlpipe,所以PHP可以直接读取字形,并且只需要添加所需的条件。

相关问题