mysql 某字段值(1,2,3,4,5),php数组(2,3),如何查询
2013-11-26 来自:Nightmare 7 人回应

mysql表中有一个字段,值格式为:“1,2,3,4,5”
php中的一个数组如:array(2,3),如何跟数据中的这个字段匹配至少有一个元素相同,求sql如何构造?

2013-12-03 来自:funfun

表沒有不規範,這種情況應用也挺多的,舉個例子,就像文章具有多選的tag,如,最新,最熱,推薦 等分別對應1,2,3。具有多標籤的文章存儲格式按照逗號分隔。
那麼這時候,需要列出帶有某種標籤的文章時,通過find_in_set() 來查找,這個函數可以說是專門處理這種情況的。
比如需要取最熱,或推薦的文章(類似你的array(2,3))那麼sql可以為:

select ...... where find_in_set(2,字段) or find_in_set(3,字段)
2013-12-02 来自:布小棉

首先,你的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 WHERE value IN (".implode ( ',' , array(2,3) ) .") AND id = '父id值'";

2013-12-01 来自:丁卯丁

同意@冯义军的答案,其实还可以用

SELECT * FROM table WHERE CONCAT(',', field, ',') REGEXP ",[23],"

其中 , 可以为任意分割符号,之前处理过有人用 | 做分割符的例子

2013-11-29 来自:Circle❤Teuk

同意@冯义军的答案,其实还可以用

  
SELECT * FROM table WHERE CONCAT(',', field, ',') REGEXP ",[23],"
2013-11-28 来自:waypig

首先,你的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”'
);
2013-11-28 来自:Circle❤Teuk

表沒有不規範,這種情況應用也挺多的,舉個例子,就像文章具有多選的tag,如,最新,最熱,推薦 等分別對應1,2,3。具有多標籤的文章存儲格式按照逗號分隔。
那麼這時候,需要列出帶有某種標籤的文章時,通過find_in_set() 來查找,這個函數可以說是專門處理這種情況的。
比如需要取最熱,或推薦的文章(類似你的array(2,3))那麼sql可以為:

  
select ...... where find_in_set(2,字段) or find_in_set(3,字段)
2013-11-27 来自:jordan2659

用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));

您的回应

你还未登陆,不能回应!登陆