поиск содержимого полей MySQL

0

У меня есть настройка таблицы следующим образом

  `id` int(11) NOT NULL AUTO_INCREMENT,
  `eventid` int(11) NOT NULL,
  `invites` text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)

В этой таблице у меня есть строки, которые выглядят так:

1, 127, '32215, 55648, 89887, 55555, 66666, 33333'
2, 168, '44444, 33333, 121212, 0540541'

Как бы я искал концы поля invites для соответствия определенному числу, например, если я хотел найти 33333, он вернул бы обе строки, но если бы я искал 44444, он бы вернуть только второй?

Теги:

2 ответа

3
Лучший ответ

Я считаю, что вы можете использовать find_in_set(), поэтому что-то вроде:

select * from tablename where find_in_set('44444', invites);

Это не очень хороший дизайн базы данных.

  • 0
    Каковы недостатки и что будет лучшим решением? Учтите, что у меня может быть до 1000 разностных чисел в строке в поле приглашения
  • 0
    недостатком является то, что find_in_set () будет довольно медленным, если ему придется анализировать текстовое поле в поисках идентификаторов. Лучшим решением было бы просто иметь несколько строк для каждого события и делать приглашения равными int, причем каждая строка является одной из значения вашего текущего поля приглашений. Затем добавьте индексы и к Eventid, и к Invites (или Inidid, если вы переименуете его, я бы, если предположить, что это идентификаторы), простой выбор указанной таблицы для конкретного приглашения, будет возвращать правильные четные коды намного быстрее.
0

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

eventid invitationid
1 15
1 16
1 17
2 18
3 19
3 20

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню