MySQL Select Statement, ГДЕ 'В' пункте

Никакой метод не может быть выполнен от блока, загруженного ReflectionOnlyLoad(), Вы доберетесь InvalidOperationException. Таким образом, это - безопасный способ определить контент блока использование отражения.

7
задан Lukáš Lalinský 18 October 2009 в 21:59
поделиться

5 ответов

Вы должны использовать ключевое слово 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
    )

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

11
ответ дан 6 December 2019 в 05:55
поделиться

Удалите кавычки в операторе IN. Синтаксис:

... WHERE column IN (1,2,3) 

, а не тот, который вы использовали

... WHERE column IN ('1,2,3')

Также см. документацию по IN, есть еще примеры.

13
ответ дан 6 December 2019 в 05:55
поделиться

Я думаю, что вам нужен следующий запрос:

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

Но вы должны серьезно подумать о нормализации базы данных, чтобы каждый день имел свою собственную строку.

5
ответ дан 6 December 2019 в 05:55
поделиться

Если я правильно понял ваш вопрос, вы хотите, чтобы содержимое поля varchar обрабатывалось как список, разделенный запятыми, и проверял, не содержит ли этот список определенного значения. Для этого вам понадобится функция find_in_set (str, strlist) .
Но имейте в виду, что MySQL не может использовать индекс в этом случае, и вашему запросу всегда потребуется полное сканирование таблицы. может быть лучше не хранить структурированные данные (и выполнять сравнения по отдельным элементам) в одном столбце, а использовать другую таблицу и JOIN, как предлагалось в других ответах.

2
ответ дан 6 December 2019 в 05:55
поделиться

days не содержит список строк. Он содержит одну строку. Находится ли строка «1,3,5» внутри одной из строк в {'1'}? Ясно, что ответ отрицательный. Либо проведите рефакторинг в другую таблицу, либо будьте готовы к большему количеству манипуляций со строками

0
ответ дан 6 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: