Как я могу выбрать, используя пересечение стоимости разделенного запятой? -- mysql поле с участием sql пол Связанный проблема

How can I select using an intersection of comma-separated value?


1
vote

проблема

русский

У меня есть столбец, удерживает значения, разделенные запятыми.

 <код> 1,2,3 4,6,7 2,3,8 12234,5467,232445,232455,11223   

с заданными критериями массива (например, <код> 1,4,9 ),

Как я могу выбрать строки, значение которых содержит любой из данных?

Я имею в виду, когда мне дают <код> 1,4,9 , мне нужно выбрать

 <код> 1,2,3 -- has 1 4,6,7 -- has 4   

<Сильное> Обновление

У меня есть таблица, у которого есть столбец, разделенные запятыми значения основных ключей другого объекта. Я понимаю причину, почему оригинальный дизайнер таблицы сделал это. Другие объекты фактически проживают в другой базе данных, что означает не приключенную. Или он или она просто хотела это поделать.

Студенческая таблица

 <код> id     name     classes --------------------------- 1      John     1,2,3 2      Jane     2,8,233423423   

Критерии

с заданными номерами классов, разделенных запятыми, найдите студентов, которые присутствуют на любой из них.

 <код> given: 1           -> select John given: 233423423   -> select Jane given: 1,233423423 -> select Both   
Английский оригинал

I have a column holds a comma-separated values.

1,2,3 4,6,7 2,3,8 12234,5467,232445,232455,11223 

With given criteria of array (e.g., 1,4,9),

How can I select rows whose value contains any of given?

I mean when I am given with 1,4,9, I need to select

1,2,3 -- has 1 4,6,7 -- has 4 

UPDATE

I have a table who has a column of comma-separated values of other entity's primary keys. I understand the reason why the original table designer did this. The other entity actually resides in other database which means not joinable. Or he or she just wanted to do like this.

The STUDENT table

id     name     classes --------------------------- 1      John     1,2,3 2      Jane     2,8,233423423 

The Criteria

With given comma-separated class numbers, find students who is attending any of them.

given: 1           -> select John given: 233423423   -> select Jane given: 1,233423423 -> select Both 
</div
     
         
         

Список ответов

1
 
vote
vote
Лучший ответ
 

Если у вас есть вход <код> 1,4,9 , и вы должны найти строки, где любой из 1, 4 или 9 происходит в списке, разделенных запятыми?

 <код> SELECT ... FROM MyTable WHERE FIND_IN_SET(1, mycolumn)  OR FIND_IN_SET(4, mycolumn)  OR FIND_IN_SET(9, mycolumn)   

см. см. https: // dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_find-in-set для получения информации об этой функции.

Это должно проиллюстрировать вам, что хранение списков, разделенных запятыми, не является хорошей идеей для реляционной базы данных, когда вы хотите лечить элементы списка как дискретные значения.

Смотрите также мой ответ на хранит список разграниченного в столбце базы данных действительно так плохо?

 

If you have an input 1,4,9 and you have to find rows where any of 1, 4, or 9 occur in a comma-separated list?

SELECT ... FROM MyTable WHERE FIND_IN_SET(1, mycolumn)  OR FIND_IN_SET(4, mycolumn)  OR FIND_IN_SET(9, mycolumn) 

See https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_find-in-set for information about this function.

This should illustrate to you that storing comma-separated lists is not a good idea for a relational database, when you want to treat the elements of the list as discrete values.

See also my answer to Is storing a delimited list in a database column really that bad?

</div
 
 
 
 
1
 
vote

Вы можете использовать динамический шаблон для регулярного выражения. Например:

 <код> SET @Criteria='1,4,9'; SELECT `name`  FROM STUDENT  WHERE STUDENT.classes REGEXP concat('(^|,)(', REPLACE(@Criteria, ',', '|'), ')(,|$)');   
 

You can use dynamic template for regular expression. For example:

SET @Criteria='1,4,9'; SELECT `name`  FROM STUDENT  WHERE STUDENT.classes REGEXP concat('(^|,)(', REPLACE(@Criteria, ',', '|'), ')(,|$)'); 
</div
 
 
 
 

Связанный проблема

0  Pandas импорт не вставляет все строки  ( Pandas import not inserting all rows ) 
Я импортирую файл .csv с 3300 рядами данных через следующее: <код> kendo0 После успешного импорта я делаю запрос «Выбрать * из ...» на моем столе, которы...

1  Доступ к данным из другой базы данных в Joomla 3.2+  ( Accessing data from another database in joomla 3 2 ) 
Я обновляю свои компоненты от Joomla 1.7 до Joomla 3.3 и должен держать оригинальную базу данных. Поэтому мне необходимо получить доступ к данным отображения ...

-2  PHP отображается только идентификатор, а не значение из MySQL [Закрыто]  ( Php only displaying id and not the value from mysql ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыт . Этот вопрос нуждается в Детали или ясность . В настоящее...

1  Иерархическая система комментариев в резьбовом режиме: php и mysql  ( Hierarchical commenting system in threaded view php and mysql ) 
У меня есть необходимость оказать резьбовое изображение 2-уровневых иерархических комментариев системы. Комментарии хранятся в базе данных. Информация о иерар...

0  Как я могу выбрать следующее бронирование MySQL?  ( How can i select the next reservation mysql ) 
У меня есть таблица, вызывающая бронирование, и она содержит все бронирование для каждого автомобиля. И у меня есть поле резервированияStatus, которое означае...

0  Должен ли я обрабатывать шланг / плохие слова маскировки на стороне сервера (или на стороне клиента) для достижения лучшей производительности?  ( Should i process slang bad words masking on server side or client side to achi ) 
Я разрабатываю в чате в чате в режиме реального времени и необходимость замаскировать плохие слова, которые клиент отправляет. Итак, теперь мне интересно пров...

-1  Используйте SELECT Под действие  ( Use select under case statement ) 
Я хочу использовать запрос, который позволяет мне получить два различия в зависимости от фильтра. Я попробовал это, но не работает. <код> CASE WHEN filtre =...

0  Сумма дебета на базе месяца в SQL  ( Sum of debit on the base of month in sql ) 
У меня есть квитанция об имени таблицы Скретко, как следует, <код> account_no date transaction_type amount s1 2012-7-7 opening ...

0  Ошибка обновления записи  ( Error updating a record ) 
Я получаю ошибку mysql: #update (ActiveReCord :: authentInvalid) "mysql :: Ошибка: # hy 000got Ошибка 139 из механизма хранения: При попытке обновить те...

0  Если запись в таблице A не существует в таблице b сделать что-то, как бы я пошел по этому поводу?  ( If record in table a does not exist in table b do something how would i go abou ) 
У меня есть таблица A с полем, называемым писем, мне нужно проверить таблицу B, которая также имеет поле под названием Emails. Если электронное письмо в табли...

0  Лучший способ написать этот запрос?  ( Best way to write this query ) 
Я делаю подпроси в присоединении к другой таблице, когда я хотел иметь возможность отсортировать результаты, которые я вернулся с ним, мне нужен только первый...

1  Проблемы проектирования базы данных с отношениями  ( Database design issues with relationships ) 
Я работаю над обновлением для существующей базы данных, которая была разработана без какого-либо из кода для реализации рассматриваемой конструкции. Теперь я ...

0  Процедура ничего не делает  ( Procedure doesnt do anything ) 
Я сделал процедуру в MySQL. Похоже, это выглядит. Я назвал эту процедуру из PHP. После этого звонка стол все еще остается пустым, и я не знаю почему. ...

0  Пройдите имя таблицы, чтобы выбрать оператор из курсора  ( Pass table name to select statement from cursor ) 
Как я могу использовать значения, возвращаемые из курсора в качестве названий таблиц в MySQL-процедурах? <код> DECLARE cur CURSOR FOR select table_name, col...

0  Оптимизировать этот запрос на 1000000+ строк  ( Optimize this query for 1000000 rows ) 
Мне нужно потянуть данные и записывать его в файл CSV, но слишком много времени и слишком много времени. Что не так с этим и что я могу сделать? Кроме того, я...

Связанный проблема

0  Pandas импорт не вставляет все строки 
1  Доступ к данным из другой базы данных в Joomla 3.2+ 
-2  PHP отображается только идентификатор, а не значение из MySQL [Закрыто] 
1  Иерархическая система комментариев в резьбовом режиме: php и mysql 
0  Как я могу выбрать следующее бронирование MySQL? 
0  Должен ли я обрабатывать шланг / плохие слова маскировки на стороне сервера (или на стороне клиента) для достижения лучшей производительности? 
-1  Используйте SELECT Под действие 
0  Сумма дебета на базе месяца в SQL 
0  Ошибка обновления записи 
0  Если запись в таблице A не существует в таблице b сделать что-то, как бы я пошел по этому поводу? 
0  Лучший способ написать этот запрос? 
1  Проблемы проектирования базы данных с отношениями 
0  Процедура ничего не делает 
0  Пройдите имя таблицы, чтобы выбрать оператор из курсора 
0  Оптимизировать этот запрос на 1000000+ строк