Никакой метод не может быть выполнен от блока, загруженного ReflectionOnlyLoad()
, Вы доберетесь InvalidOperationException
. Таким образом, это - безопасный способ определить контент блока использование отражения.
Вы должны использовать ключевое слово like
для частичного сопоставления поля char:
where days like '%1%'
Edit: VolkerK и Lukas Lalinsky оба предлагают MySQL find_in_set
, который, вероятно, лучше, чем like
для того, что вы хотите сделать. Однако следующая рекомендация по нормализации базы данных по-прежнему применима.
Однако, вы не должны хранить несколько значений в одном поле базы данных. Вместо этого рассмотрите возможность использования двух таблиц:
course_data:
user_id
course_days:
user_id
day_number
Тогда у вас будут следующие данные:
course_data:
user_id
405
course_days
user_id day_number
405 1
405 3
405 5
Затем вы можете правильно запросить эту схему. Например:
select cd.user_id
from course_data as cd
where cd.user_id not in
(
select course_days.user_id
from course_days
where course_days.user_id = cd.user_id
and course_days.day_number = 1
)
(или, это должно быть близко; я не точно уверен, что вы пытаетесь выполнить или как выглядит остальная часть вашей схемы, поэтому это лучшее предположение) .
Удалите кавычки в операторе IN. Синтаксис:
... WHERE column IN (1,2,3)
, а не тот, который вы использовали
... WHERE column IN ('1,2,3')
Также см. документацию по IN, есть еще примеры.
Я думаю, что вам нужен следующий запрос:
SELECT usrID, usrFirst, usrLast, usrEmail
FROM tblUsers
WHERE usrID NOT IN (
SELECT user_id
FROM course_data
WHERE find_in_set(?, days) > 0
)
ORDER BY usrID
Но вы должны серьезно подумать о нормализации базы данных, чтобы каждый день имел свою собственную строку.
Если я правильно понял ваш вопрос, вы хотите, чтобы содержимое поля varchar обрабатывалось как список, разделенный запятыми, и проверял, не содержит ли этот список определенного значения. Для этого вам понадобится функция find_in_set (str, strlist) .
Но имейте в виду, что MySQL не может использовать индекс в этом случае, и вашему запросу всегда потребуется полное сканирование таблицы. может быть лучше не хранить структурированные данные (и выполнять сравнения по отдельным элементам) в одном столбце, а использовать другую таблицу и JOIN, как предлагалось в других ответах.
days не содержит список строк. Он содержит одну строку. Находится ли строка «1,3,5» внутри одной из строк в {'1'}? Ясно, что ответ отрицательный. Либо проведите рефакторинг в другую таблицу, либо будьте готовы к большему количеству манипуляций со строками