Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅显示在特定数字(php、sql)下标记的用户_Php_Mysql - Fatal编程技术网

仅显示在特定数字(php、sql)下标记的用户

仅显示在特定数字(php、sql)下标记的用户,php,mysql,Php,Mysql,我有这张桌子 table 'users' id name tag 1 kfir 2,4,7,4 2 avi 1,3,2,5 3 sara 6,8,9,3,5 如何仅显示标记在数字“5”下的用户 我的代码 $result_total = mysql_query("select * from users") or die(mysql_error()); $total = my

我有这张桌子

table 'users'

id      name          tag
1       kfir          2,4,7,4
2       avi           1,3,2,5
3       sara          6,8,9,3,5
如何仅显示标记在数字“5”下的用户

我的代码

$result_total = mysql_query("select * from  users") or die(mysql_error());
$total = mysql_num_rows($result_total);
这样做:

$result_total = mysql_query("SELECT * FROM `users` WHERE FIND_IN_SET('5',`tag`)");
$total = mysql_num_rows($result_total);

另外,尽量不要使用MySQL,而是使用MySQLi。

此外,对于非我的sql特定解决方案,您可以使用:

select * from users where ','+tag+',' like '%,5,%'

将标记字段拆分为一个单独的表,所有问题都将消失。每次开发人员在数据库文本字段中输入逗号分隔的数据时,达赖喇嘛都会吃掉一只小猫。你能给我举个例子吗?这是一门基础知识,每个基本的在线SQL课程都会包含它的例子。-1,真正问题的俗套解决方法,这个操作符应该只有。@NielsKeurentjes,我甚至在
文本
字段类型上使用过它,它工作得很好。那么它有什么问题?@user2398456,不客气:)@SAVAFA“但它有效”是实现解决方案的最糟糕论据
FIND_IN_SET
如果不在集合中使用,内部只进行字符串匹配-速度慢、无法维护且无法缩放。正确的解决方案是一个单独的
UserInTag
表,它有一个正确的连接,现在会快100倍,一旦表开始增长,它会快10000倍。@SAVAFA是的,删除和插入是正常的方法。这是关系数据库优化要做的事情,也是它们最擅长的事情——连接和添加/删除大量行,而不是在文本字段上进行复杂的字符串匹配。如果
5
在最开始的时候,比如
'5,6,8'
(或者甚至在最后)?它仍然可以工作,因为我们在上面的标记字段(','+tag+',')之前添加了逗号。这样可以确保标记前后始终有一个逗号。