SQL-запросы - неправильный результат из-за оператора Like

Название таблицы: студент:

id    name     topics
---   ----     --------
1     Test1    1,2,10,15,25
2     Test2    5,21,11,18,13
3     Test3    2,1,16,25,10
4     Test4    2

Мой запрос:

select * from student where topics like '%2%'

вывод: все 4 записи. Ожидается: но мне нужно получить только 3 записи, так как столбец тем с идентификатором 1,3,4 содержит 2. 2-я запись не содержит 2.

Технически он содержит 2, из которых 21 имеет 2. Ваша подстановочная карта ищет только 2.

saravanatn 06.06.2018 14:53

2 из 25 и 21 - это как% 2%. Вы никогда не должны хранить значения с разделителями в столбце, вы должны использовать промежуточную таблицу «один ко многим» с несколькими строками studentId -> topic.

Alex K. 06.06.2018 14:53
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
2
57
3

Ответы 3

Вторая запись ДЕЙСТВИТЕЛЬНО содержит 2. Вам нужно использовать что-то вроде этого.

WHere topics=2 or topics like '2,%'or topics like '%,2' or topics like '%,2,%'

Первый проверяет, является ли количество тем 2. Второй, если первым является 2, но есть и другие. Третий проверяет, является ли 2 последним, но есть некоторые числа перед, а четвертый проверяет, находится ли 2 где-то посередине.

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

select * from student where FIND_IN_SET ('2', topics)

Что-нибудь в этом роде может помочь?

SELECT * FROM student WHERE topics LIKE '2,%' OR topics LIKE '%,2,%' OR topics LIKE '%,2' OR topics= '2';

печально, что можно использовать IN с LIKE.

Другие вопросы по теме