2013-05-03 60 views
0

我想要从数据表中抓取数据行,其中一个单词与我的列'story'中的文本内的某个单词匹配。检查与MySQL查询的字符串匹配

表结构:

post_id | user_id | story 
---------------------------------- 
1  | 1  | Hello World What's up? 
2  | 4  | Hello guys! 
3  | 7  | Working on shareit.me! 

例如:

我想抓住所有含你好(我找不区分大小写)字的帖子。

我该怎么做?

这是我迄今所做的:

// this will be the keyword! so use the variable $filter_tag in the query! 
$filter_tag= $_GET['tag']; 

//query for getting the users' posts containing the select tag 
$query_posts= "SELECT * FROM posts WHERE user_id= '$user_id' ORDER BY post_id 
DESC"; 

$result_posts= mysqli_query($connect, $query_posts); 

谢谢!

+1

那是一个错误的评论。查询是**不是**选择包含标签的用户的所有帖子,而是选择用户的所有帖子。 – 2013-05-03 13:02:22

+0

你喜欢运营商尝试吗?一个基本的运营商应该为你做这件事。记住朋友基本知识是地下室 – 2013-05-03 13:03:06

+0

我想你应该做一些关于如何做到这一点的搜索结果。以这种方式查询是SQL最基本的功能之一。 – Chad 2013-05-03 13:04:30

回答

3
$query_posts= "SELECT * FROM posts WHERE user_id= '$user_id' AND story LIKE '%$filter_tag%' ORDER BY post_id 
    DESC"; 
0

这将是:

SELECT * FROM posts WHERE ... AND story LIKE '%hello%'. 

一般的 “%” 是一个通配符(如 '*')。所以你可以使用'hello%''%hello%'等等。

+0

另外请记住从“get” – 2013-05-03 13:05:07

0

可以使用LIKE操作:

$query_posts = "SELECT * FROM posts WHERE user_id = $user_id AND story LIKE '%yourword%' ORDER BY post_id"; 

%字符就像通配符。 %表示匹配任意数量的字符,其中_(下划线)仅匹配一个字符。

注:我从你的user_id列检查删除的单引号太 - 这,是一个整数,想不加引号的 - 他们是字符串。

0

不言而喻不要忘记逃避投入。

$query_posts= "SELECT * FROM posts WHERE user_id = '$user_id' AND story LIKE '%".mysql_real_escape_string($filter_tag)."%'"; 
1
SELECT * FROM posts WHERE ... AND LOWER(story) LIKE '%hello%' 

OR

SELECT * FROM posts WHERE ... 
AND story COLLATE latin1_general_ci_ai LIKE '%hello%' 
0

最好的解决方法是将使用MATCH()AGAINST()和FULLTEXT索引。