djQuery
@djQuery
"Кодируем помаленьку" ("Сказка о Тройке")))

Почему не работает простенький запрос mySQL?

Коллеги, что то затупил, пните в нужную сторону.

Имеется таблица mySQL TEST из одного поля 'types' типа varchar, в котором через запятую перечислены некоторые числа:
1,17,22
22,33,44
17,19,22

Нужно выбрать строки, содержащие 17. Делаю:

SELECT * FROM TEST WHERE 17 IN (types)

В результате - EMPTY SET. Не пойму, в чём дело........ Точнее сказать, предполагаю, но победить не могу.
  • Вопрос задан
  • 173 просмотра
Решения вопроса 2
Arris
@Arris
Сапиенсы учатся, играя.
Потому что varchar - это строка, а не массив значений.

вам нужно сначала разбить значения поля types на массив значений, а потом уже искать среди них. Штатного аналога explode() вроде бы нет.

Посмотрите: https://stackoverflow.com/a/5928675/5127037
CREATE FUNCTION SPLIT_STRING(str VARCHAR(255), delim VARCHAR(12), pos INT)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(str, delim, pos),
       LENGTH(SUBSTRING_INDEX(str, delim, pos-1)) + 1),
       delim, '');


Ну дальше уже что-нибудь в духе
SELECT * FROM test WHERE 17 in ( SELECT SPLIT_STRING(test.types, ',' , 1) )
Ответ написан
AlexKeller
@AlexKeller
Ваше поле - это строка. Используйте строковые функции для вашей задачи. Например, FIND_IN_SET
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы