необходимо фильтровать данные в mysql с массивом данных [закрыто]

У меня была эта проблема с FileSystemWatcher и выяснилось, что следующий код решил проблему:

fsw.SynchronizingObject = this

Затем элемент управления использует текущий объект формы для решения с событиями, и поэтому будет в одной и той же теме.

-1
задан Lawrence Cherone 13 July 2018 в 03:53
поделиться

3 ответа

Вы можете использовать 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     |
+----+-------------+

Кроме того, как упоминалось в «Правэне S», FIND_IN_SET () также работает для вас, он более прост и изящный, чем LIKE

-1
ответ дан lucumt 17 August 2018 в 13:42
поделиться
  • 1
    Он работает правильно, спасибо вам большое ... & lt; 3 – AB Shaman 13 July 2018 в 05:22

Грустно Нет встроенного массива Datatype в mysql См. это Как хранить массивы в MySQL?

Лучшая ставка, которую вы можете сделать, это пойти на Postgres, где он имеет поддержка для нее

Или в любом случае вы можете создать текстовый тип данных и сохранить массив как json. Что касается получения набора данных. Вам нужно сделать это вручную на php. Нет никакого способа сделать это только в MYSQL

Или гораздо лучше, но нормализовать снова вашу таблицу в 3NF. Разделить ARRY в отдельную таблицу и связать ее с помощью ID

-1
ответ дан keysl 17 August 2018 в 13:42
поделиться

Возможно, этот код поможет вам

Пример кода: SELECT FIND_IN_SET('1', '1,2,3,4,5')

Возможно, ваш код: SELECT * from table WHERE FIND_IN_SET('2', array)>0

1
ответ дан Praveen S 17 August 2018 в 13:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: