需要使用数据数组过滤mysql中的数据

时间:2018-07-13 03:44:28

标签: php mysql

我已附加数据并需要结果,我需要从数组列表中过滤数据。我显示了“ 2”个数据结果。

如何获取mysql数据中的输出?

enter image description here

3 个答案:

答案 0 :(得分:1)

也许此代码可以帮助您

示例代码:SELECT FIND_IN_SET('1', '1,2,3,4,5')

您的代码可能像:SELECT * from table WHERE FIND_IN_SET('2', array)>0

答案 1 :(得分:-1)

不幸的是,mysql中没有本地数组数据类型 看到这个 How to store arrays in MySQL?

最好的选择就是去Postgres支持的地方

或者,无论如何,您可以创建一个文本数据类型并将该数组另存为json。至于获取数据集。您需要在php上手动进行。单独在MYSQL中无法做到这一点

还是更好 再次将表格标准化为3NF 将ARRY分离到单独的表中,并使用ID将其绑定

答案 2 :(得分:-1)

您可以使用LIKE来完成

SELECT t.* FROM yourtable t
 WHERE t.attr LIKE CONCAT('2,%')
 OR t.attr LIKE CONCAT('%,2')
 OR t.attr LIKE CONCAT('%,2,%')

测试数据

CREATE TABLE `system_users` (
  `id` varchar(32) NOT NULL,
  `name` varchar(32) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert  into `system_users`(`id`,`name`) 
values 
('1','1,5,3,12'),
('2','1,2,3'),
('3','1,12,13'),
('4','1,5,2,10,12'),
('5','2,3,4'),
('6','5,4,3,2');

工作查询:

SELECT * FROM system_users u 
  WHERE u.name LIKE CONCAT('2,%')
     OR u.name LIKE CONCAT('%,2')
     OR u.name LIKE CONCAT('%,2,%');

输出结果:

+----+-------------+
| id | name        |
+----+-------------+
| 2  | 1,2,3       |
| 4  | 1,5,2,10,12 |
| 5  | 2,3,4       |
| 6  | 5,4,3,2     |
+----+-------------+

此外,正如 Praveen S 所述, FIND_IN_SET() 也为您服务,比LIKE