2016-11-30 7 views
0

У меня есть столбец mysql, называемый категориями. Он может содержать одно или несколько значений, например: 1 или 2 или 1,2,3 или 2,12 ...Проверьте, существует ли конкретное значение в столбце mysql

Я пытаюсь получить все строки, содержащие значение, 2.

$query = "SELECT * FROM my_table WHERE categories LIKE '2'"; 
$rows = mysql_query($query); 

Это возвращает строку если столбец имеет значение 2, но не 1,2,3 или 2,12. Как я могу получить все строки, включая значение 2?

+1

Применение -> '% 2%' в запросе – jitendrapurohit

+0

http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database -column-really-that-bad/3653574 – e4c5

+0

Или функция 'find_in_set' как' find_in_set ('2', categories) '. – Blank

ответ

0

Вы можете использовать одно из следующих действий:

% является подстановочные поэтому он будет соответствовать 2 или 1,2 и т.д. Все, что по обе стороны от 2. Проблема заключается в том, что может соответствовать 21, 22 и т.д.

$query = "SELECT * FROM my_table WHERE categories LIKE '%2%'"; 

Вместо этого следует рассмотреть функцию find_in_set MySQL, который ожидает разделенный запятыми список для значения.

$query = "SELECT * FROM my_table WHERE find_in_set('2', `categories`)"; 
+0

find_in_set работает. Благодаря! :) – Jqrp

0

Как @jitendrapurohut сказал, вы можете сделать это с помощью

$query = "SELECT * FROM my_table WHERE categories LIKE '%2%'"; 
$rows = mysql_query($query); 

Но на самом деле плохо для хранения коллекций, как это. Лучше Подход состоит в следующем:

  1. категории (id_c, имя) => Таблица, с каждой категорией
  2. my_table (id_m [, ...])
  3. categories_my_table (id_c, id_m)

Затем использовать этот запрос:

SELECT * 
FROM my_table m 
INNER JOIN categories_my_table cm ON m.id_m = cm.id_m 
INNER JOIN categories c ON cm.id_c = c.id_c 
WHERE 
c.id_c = 2; 

EDIT: @ e4c5 ссылка объясняет, почему это плохо для хранения коллекций л икэ это ...

-1
SELECT * FROM my_table WHERE categories LIKE '%2%' AND categories!='1,2,3' AND categories!='2,12'; 
+0

Привет, @Jqrp попробуйте этот запрос – Singh

+0

Это не сработает очень хорошо - например, оно будет содержать строки, где, например, категория «23» или «102», но они не нужны. –

Смежные вопросы