Искать ID в столбец Идентификаторов, разделенных разделитель в MySQL
Я использую таблицу с именем chat
и в ней есть целая структура, чтобы мой скрипт чата, и я пытаюсь создать чат в группах, пока все хорошо. Тем не менее, в таблице chat
имеет столбец с именем participantes
, где я ввожу участники группы таким образом:
01,02,03,04,05,6,0,2,522....
, Где каждая цифра до запятая соответствует ID пользователя, то есть 01 -> Я 02-> вы или любой другой, и так будет...
вопрос В том, как я ищу все результаты, которые содержат мой id
в столбце participantes
? Как читать каждое число, запятая, запятая, даже найти мой во всей таблице? Есть ли способ по умолчанию в MySQL для этого?
1 answers
SELECT
Помнят по @bfavaretto, MySQL имеет определенную функцию для вашей потребности:
SELECT * FROM chat WHERE FIND_IN_SET( '09', participantes );
Решение в целом для различных диалектов SQL это можно найти таким образом:
SELECT * FROM chat WHERE CONCAT( ",", participantes, "," ) LIKE '%,09,%';
Однако, если у вас есть много данных, производительности не будет из самых удивительных 1. Ясно, что в PHP вы будете поместить переменную вместо 09
пример (с осторожностью, чтобы избежать SQL-Инъекции).
Помните, поразить своих элементов, чтобы они согласованно, потому что в вашем примере есть вещи с одного, двух и трех цифр, а некоторые с нуля предыдущей, а другие нет, и это знак что-то слегка странно 2 в реальном случае вы действительно таким образом.
было бы Лучше...
...использование вспомогательной таблицы, касающиеся участников в залы, так что вы бы что-то в этом шаблоне:
sala | participante
------+---------------
1 | 12
1 | 7
1 | 342
1 | 1
2 | 12
2 | 28
3 | 1
...
Таким образом, достаточно дать: как сделать JOIN для поиска данных. Кроме того, вы лучше организовать ваши данные, вы можете использовать индексы, чтобы более эффективно их SELECT
, и, вероятно, сможете использовать эту таблицу, чтобы другие части вашей системы, которые сегодня зависят от поля с разделителями-запятыми.
1. ужасно, в случае, если like
, немного лучше в find_in_set
2. жича