MySQL выбирает что-то с помощью информации о массиве - PullRequest
2 голосов
/ 27 июля 2011

Есть ли способ сделать что-то подобное?

SELECT * FROM tablename WHERE x CONTAINS "1"

По сути, я хочу выбрать данные из базы данных, где x содержит конкретное число.Дело в том, что столбец x в любой строке может содержать «1, 2, 3», и я хочу выбрать все те, которые содержат 1, а именно 1, а не 11 или что-нибудь, что содержит 1, а именно 1.

Вот пример:

id   title   x
-------------------
1    row1    1,22,3
2    row2    1,5
3    row3    5,91
4    row4    70

И я хочу, чтобы мой запрос возвращал строки 1 и 2. Я не хочу строки 3, так как 1 находится внутри числа 91. Я не хочу строки4 потому что там тоже нет 1.

Ответы [ 3 ]

2 голосов
/ 27 июля 2011

Вы можете использовать функцию FIND_IN_SET следующим образом:

SELECT * FROM tablename WHERE FIND_IN_SET('1', x)

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

1 голос
/ 27 июля 2011

Вы можете попробовать это:

SELECT * FROM tablename WHERE x REGEXP "(^|,)1(,|$)"
1 голос
/ 27 июля 2011

В идеале вы бы нормализовали ваш столбец 'x' в отдельной таблице.

Но ... вы также можете взломать его так:

SELECT * FROM tablename WHERE x LIKE '%,1' OR x LIKE '1,%' OR x LIKE '%,1,%'

Это в основном просто обрабатываеттри разных случая, когда «1» - это первый, последний или средний элемент в вашем списке.(обратите внимание, если после запятых у вас есть пробел, вы бы изменили последнюю часть на «%, 1,%»

РЕДАКТИРОВАТЬ: На самом деле REGEXP Дмитрия лучше, а FIND_IN_SET Ара выглядит идеальным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...