仅显示在特定数字(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+',')之前添加了逗号。这样可以确保标记前后始终有一个逗号。