2016-08-12 3 views
0

Я не нашел решения для своей проблемы.Искать строки в MySQL в текстовой колонке, разделенной «,»

Вот пример:

А имеют таблицы, например: Person. И в нем есть столбец, который содержит много цифр, разделенных символом «,». Эти цифры представляют собой вещи, но сейчас это не актуально.

Таблица Person:

nm_name: Jonas 
nm_email: [email protected] 
ds_numbers: 1,2,3,5,17,27,67,77, 

Я хочу, чтобы сделать запрос, фильтровать поисковые запросы в таблице человека по данной колонке ds_numbers. Но пользователь будет выбирать номера ведьм с помощью фильтра, например, если пользователь выберет по крайней мере 1 номер, который находится в этом столбце, регистр придет.

Если я выберем, например, «3», этот регистр придет, или «3,55,12» тоже придет, потому что по крайней мере 1 значение должно быть в строке.

Проблема в том, что я не могу использовать «% 4%», потому что я вернусь 4, 41, 74 ... Какие-нибудь разные решения?

Важно: Я устанавливаю этот запрос на Java, поэтому я могу использовать функции Java, такие как Loops, но я не нашел решения. Есть идеи?

И я использую MySQL.

+0

Возможный дубликат [Можете ли вы разделить/взорвать поле в запросе MySQL?] (Http://stackoverflow.com/questions/471914/can-you-split-explode-a-field-in-a-mysql -query) – Jasha

ответ

0

Вы можете использовать LIKE, но с текущим форматом, вы получите ложные срабатывания. «% 4%» также будет соответствовать номеру 40 или 14.

В идеале измените данные, чтобы сохранить числа с разделителем. "| 3 |, | 55 |, | 32 |". Затем, когда вы выбираете LIKE '% | 3 |%', он будет соответствовать только | 3 |.

Вы можете использовать LIKE '% 3,%', но это не будет соответствовать последнему числу, если 3 - это самое последнее число в строке.

+0

Я подумал об этом, чтобы использовать «%», это действительно не сработает. Но мне понравилось ваше решение использовать «|». Конечно, это сработает, но у вас уже есть гигантская база, это невозможно. Но спасибо за обмен! –

+1

У ваших полей есть конечная запятая в конце? (в вашем примере у вас есть один, но это может быть просто фрагмент.) Если нет, можете ли вы добавить конечную запятую к полям? если да, тогда вы можете использовать LIKE '%, 3,%' или LIKE '%, 343,%' – SilicaGel

+0

Спасибо, хорошее решение! –

0

Возможно, вам удастся избежать простого текстового поиска с использованием подстановочных знаков с помощью оператора LIKE.

SELECT ds_numbers FROM table WHERE ds_numbers LIKE '%3%' 

Если нет, то вы можете попробовать возможности полнотекстового поиска, как упомянуто в ответе на этот вопрос: Search for string within text column in MySQL

+0

Спасибо. Я буду читать. –

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