У меня есть текстовое поле в моем pgsql DB, которое содержит идентификаторы пользователей. Одно поле может содержать одну или несколько идентификаторов, разделенных символом #. При сохранении номера интегрировалась с помощью PHP, так что я могу иметь, например:SQL Where and Like in PHP string string
Row 1: 3#36#66#33
Row 2: 5#56#33#55.
Как я должен подготовить SQL запрос, чтобы выбрать поле с одним или несколькими идентификаторами без какой-либо двусмысленности?
Пример:
SELECT product FROM cms_product WHERE product_mod LIKE '3'
Обе строки 1 и 2 могут быть выбраны, которые я не хочу. Как я могу это исправить?
РЕДАКТИРОВАТЬ:
я должен буду выбрать все строки, которые содержат идентификатор пользователя в этой сфере, например:
UserId: 3
Field 1:
55#64#333#2
Field 2:
12#3#55#6423
Field 3;
654#33#11#98
только поле 2 должно быть выбрано.
«первым была нормализация базы данных .... aaaaaaand его нет» (ссылка: HTTP: // knowyourmeme.com/memes/and-its-gone) –
В более серьезной заметке, однако, столбцы, содержащие несколько значений, разделенных символами, являются признаком «запаха кода» или, как правило, плохой схемы. Я не знаю, имеет ли postgresql специальные инструменты для них, но из вашего запроса я сказал, что это не так, или, по крайней мере, вы их не используете. –
Ваш вопрос для меня довольно неясен. Что именно вы хотите сделать? Вы хотите найти «3», но не хотите найти строки, содержащие «364» или «33»? В любом случае. Ваш DB-Design испорчен, вы не обращаете внимания на нормализацию. Вы никогда не должны хранить запятую (или любой другой символ) отдельно. Когда-либо! Серьезно проверьте нормализацию базы данных. Это заставит вашу проблему уйти само по себе - проверьте это: http://www.dreamincode.net/forums/topic/179103-relational-database-design-normalization/ – thpl