SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 12.04.2016 17:12:11

Sorex
Участник
Зарегистрирован: 24.02.2016
Сообщений: 7

Получить id там где есть совпадение числа

Помогите решить задачу.
К примеру есть такая таблица:
mysql> SELECT * FROM `test`;
+----+---------------+
| id | use_id        |
+----+---------------+
|  1 | 3,1,7,5,9     |
|  2 | 2,8,6,4       |
|  3 | 9,2,4,8,1,3,7 |
+----+---------------+
3 rows in set (0.00 sec)

В ней хранятся id-ки из другой таблицы в неотсортированном порядке. В коде я получаю к примеру вот такую строку "12,6,77,3,22,7,44,9" и мне нужно получить id-ик там где встречаются хотя-бы один раз одно число из этой строки "12,6,77,3,22,7,44,9". Пытаюсь через IN выводит не всегда корректно. Мое предположение что это из-за того что числа не отсортированы. Подскажите пожалуйста где моя ошибка или как можно написать запрос правильно. Заранее спасибо.

Пример:
не выводит поле с id-ом 2, хотя число 6 в нем присутствует

mysql> SELECT * FROM `test` WHERE 1=1 and `use_id` in (12,6,77,3,22,7,44,9);
+----+---------------+
| id | use_id        |
+----+---------------+
|  1 | 3,1,7,5,9     |
|  3 | 9,2,4,8,1,3,7 |
+----+---------------+
2 rows in set, 3 warnings (0.00 sec)

меняю 6 на 2 и уже выводит. хмм... странно

mysql> SELECT * FROM `test` WHERE 1=1 and `use_id` in (12,2,77,3,22,7,44,9);
+----+---------------+
| id | use_id        |
+----+---------------+
|  1 | 3,1,7,5,9     |
|  2 | 2,8,6,4       |
|  3 | 9,2,4,8,1,3,7 |
+----+---------------+
3 rows in set, 3 warnings (0.01 sec)

Неактивен

 

#2 12.04.2016 17:31:29

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Получить id там где есть совпадение числа

`use_id` in (12,2,77,3,22,7,44,9)
значение `use_id` переводится в число и проверяется на вхождение в список.
для первой строки `use_id` преобразуется в 3, для второй в 2, для третьей в 9
отсюда и такие результаты

ваш способ подошел бы если бы хранили данные по одному значению в строке
+----+---------------+
| id | use_id        |
+----+---------------+
|  1 | 3     |
|  1 | 1       |
|  1 | 7 |
....

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson