Задавайте вопросы, мы ответим
Вы не зашли.
Помогите решить задачу.
К примеру есть такая таблица:
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)
Неактивен
`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 |
....
Неактивен