2013-07-29 5 views
0

У меня есть текстовое поле в моем 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 должно быть выбрано.

+2

«первым была нормализация базы данных .... aaaaaaand его нет» (ссылка: HTTP: // knowyourmeme.com/memes/and-its-gone) –

+0

В более серьезной заметке, однако, столбцы, содержащие несколько значений, разделенных символами, являются признаком «запаха кода» или, как правило, плохой схемы. Я не знаю, имеет ли postgresql специальные инструменты для них, но из вашего запроса я сказал, что это не так, или, по крайней мере, вы их не используете. –

+1

Ваш вопрос для меня довольно неясен. Что именно вы хотите сделать? Вы хотите найти «3», но не хотите найти строки, содержащие «364» или «33»? В любом случае. Ваш DB-Design испорчен, вы не обращаете внимания на нормализацию. Вы никогда не должны хранить запятую (или любой другой символ) отдельно. Когда-либо! Серьезно проверьте нормализацию базы данных. Это заставит вашу проблему уйти само по себе - проверьте это: http://www.dreamincode.net/forums/topic/179103-relational-database-design-normalization/ – thpl

ответ

1

Хотя вы должны действительно работу нормализовать БД это ответ на вопрос, публикуемой

select product 
from cms_product 
where '3' = any(regexp_split_to_array(product_mod, '#')) 
+0

Да, я определенно нормализую его, но я надеюсь, что ваш совет будет таким +1. –

+0

@PAM Произошла ошибка, и я только что исправил ее. –

+0

Да, это то, что я искал, прежде чем я решил нормализовать БД. –