MySQL-mysql 某字段值(1,2,3,4,5),php数组(2,3),如何查询
mysql表中有一个字段,值格式为:“1,2,3,4,5”
php中的一个数组如:array(2,3),如何跟数据中的这个字段匹配至少有一个元素相同,求sql如何构造?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
mysql表中有一个字段,值格式为:“1,2,3,4,5”
php中的一个数组如:array(2,3),如何跟数据中的这个字段匹配至少有一个元素相同,求sql如何构造?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
首先,你的mysql表建立的不规范,值为“1,2,3,4,5”的字段,应该新建一张表来存储这些值,创建新表:
CREATE TABLE `new_table_name` (
`id` INT(11) NOT NULL COMMENT '这字段为为这个表的外键连接到值“1,2,3,4,5”表的主键',
`value` VARCHAR(10) NOT NULL COMMENT '这字段存储以逗号分割的“1,2,3,4,5”'
);
然后使用in来查询:
$sql = "SELECT count(*) FROM
new_table_name
WHEREvalue
IN (".implode ( ',' , array(2,3) ) .") ANDid
= '父id值'";用PHP的数组取交集函数就可以了,array_intersect($arr1, $arr2);
1.先冲数据库将"1,2,3,4,5",取出来放在$str里
2.然后将取出来的字符串分割成数组 $arr1 = explode(',' $str);
然后取数组交集.
$arr2 = array(1,2,3);
print_r(array_intersect($arr1, $arr2));
其中 , 可以为任意分割符号,之前处理过有人用 | 做分割符的例子
表沒有不規範,這種情況應用也挺多的,舉個例子,就像文章具有多選的tag,如,最新,最熱,推薦 等分別對應1,2,3。具有多標籤的文章存儲格式按照逗號分隔。
那麼這時候,需要列出帶有某種標籤的文章時,通過find_in_set() 來查找,這個函數可以說是專門處理這種情況的。
比如需要取最熱,或推薦的文章(類似你的array(2,3))那麼sql可以為:
select ...... where find_in_set(2,字段) or find_in_set(3,字段)