表格
你好我试着找到名称为#c3的所有主题标签,而mysqli查询显示我:3行但正确的是2行#c3 ???哪里有问题?我想告诉我2Rows!
$sql_query = mysqli_query($Connection, "SELECT * FROM my_table WHERE hashtag LIKE '%#c3%'");
echo mysqli_num_rows($sql_query);
答案 0 :(得分:4)
回答这个问题并留在评论中(由我自己)
删除最后'%#c3'
%
使用LIKE,%
通配符执行以下操作和一些示例:
%XXX%
- 匹配XXX
%XXX
- 匹配XXX
XXX%
- 匹配XXX
后的所有内容。
参考文献:
另外,如果有任何用户输入,请考虑使用预先准备好的声明:
它有助于防止潜在的SQL注入。
答案 1 :(得分:0)
您的query
错误尝试使用此
SELECT * from my_table WHERE FIND_IN_SET('#c3', hashtag);
FIND_IN_SET
返回string
的位置(如果它在strings
列表中)(作为子字符串)。字符串列表本身是一个字符串,包含由‘,’ (comma)
字符分隔的子字符串。
了解更多信息,请阅读http://www.w3resource.com/mysql/string-functions/mysql-find_in_set-function.php
答案 2 :(得分:0)
答案 3 :(得分:0)
将表拆分为2个表:
post: id | text | date
1
2
3
post_hashtag: post_id | hashtag
1 #c1
1 #c3
2 #c3
3 #c3blabla
然后您的查询变为:
SELECT post.*,post_hashtag.hashtag FROM post JOIN post_hashtag ON post.id=post_hashtag.post_id WHERE hashtag='#c3#';
分割表的行为称为规范化,您需要这样做,因为您的表不是任何正常形式,这使得它们不是关系的,这使得它们无法存储在关系数据库中。查看https://en.wikipedia.org/wiki/First_normal_form了解详情。
答案 4 :(得分:0)
查看你的表格,我建议你分解你的表格以获得多个标签链接。这样,您就可以搜索具有匹配主题标签的所有记录。
data table
+----+------+------+
| id | text | date |
+----+------+------+
hash table
+----+------+
| id | hash |
+----+------+
link table
+---------+---------+
| data_id | hash_id |
+---------+---------+
这将允许您使用如下的SQL语句:
SELECT * FROM data
INNER JOIN link ON data_id = data.id
INNER JOIN hash ON hash_id = hash.id
WHERE hash = '#3';