PHP MYSQLI计数行正确[删除]

时间:2016-08-03 11:58:40

标签: php mysql mysqli

表格

enter image description here

你好我试着找到名称为#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);

5 个答案:

答案 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)

您可以使用FIND_IN_SET

SELECT * FROM my_table WHERE FIND_IN_SET('#c3',hashtag)

请参阅文档here和示例here

答案 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';