Искать ID в столбец Идентификаторов, разделенных разделитель в MySQL


Я использую таблицу с именем chat и в ней есть целая структура, чтобы мой скрипт чата, и я пытаюсь создать чат в группах, пока все хорошо. Тем не менее, в таблице chat имеет столбец с именем participantes, где я ввожу участники группы таким образом:

01,02,03,04,05,6,0,2,522....

, Где каждая цифра до запятая соответствует ID пользователя, то есть 01 -> Я 02-> вы или любой другой, и так будет...

вопрос В том, как я ищу все результаты, которые содержат мой id в столбце participantes? Как читать каждое число, запятая, запятая, даже найти мой во всей таблице? Есть ли способ по умолчанию в MySQL для этого?

 5
Author: brasofilo, 2014-06-19

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. жича

 14
Author: Bacco, 2017-04-13 12:59:39