2016-11-24 47 views
0

我做了一个自动完成搜索,我想从描述中得到单词建议。例如,我有一篇文章描述:“这是样本描述”。如何获得像mysql查询只有类似的单词

我用这个查询

$sql ="SELECT post_content FROM {$wpdb->posts} WHERE LOWER(post_content) LIKE LOWER('%".$s."%') AND post_status='publish'"; 

,但我得到的所有匹配的描述。我怎样才能得到唯一匹配查询的单词?例如,如果我写“山姆...”我只想得到“样本”字,或者如果我写“样本des ...”我想获得“样本描述”,而不是完整的描述,那个字是它。

+0

总之你不能用mysql做单独 – 2016-11-24 22:35:42

+0

我也这么认为。你能告诉我什么吗? – user3514052

+0

一旦你有'post_content'使用php正则表达式匹配并提取所需的文本 – 2016-11-24 22:41:40

回答

1

你可以试试这个,如果你的作品:

样品

SELECT 
    SUBSTRING_INDEX(
     SUBSTRING('this is sample description and more' FROM LOCATE('sample des','this is sample description and more')) 
     ,' ' 
     ,LENGTH('sample des') - LENGTH(replace('sample des', ' ', '')) +1 
    ) as result; 

结果

result 
sample description 

尝试此查询您的SQL:

$sql =" 
SELECT 
    SUBSTRING_INDEX(
     SUBSTRING(post_content FROM LOCATE('".$s."',post_content)) 
     ,' ' 
     ,LENGTH('".$s."') - LENGTH(replace('".$s."', ' ', '')) +1 
    ) 
FROM {$wpdb->posts} 
WHERE LOWER(post_content) LIKE LOWER('%".$s."%') AND post_status='publish'"; 

请让我知道它是否适用于你(它不是testet)

+0

omg,谢谢sooo多!!!!我非常感谢你,它的工作原理:) – user3514052

+0

@ user3514052 - 好吧,只有一个小的已知错误。如果搜索字符串中的两个单词之间有更多的空格,结果会给你一个更多的单词,但是你可以在PHP中用2个scapces替换为1,或者将每个$ s更改为** replace('“。$ s。”', '','')**在SQL中 –