2014-11-04 2 views
0

Я пытаюсь запустить MySQL Query с «FIND_IN_SET» в нем.И предложение FROM после предложения OR

Запуск запрос работает, но мне также нужно найти «user_optin», где он равен 1.

Запуск этого запроса в настоящее время находит людей, которые user_optin как «0»

SELECT `user_id`, `user_firstname`, `user_surname`, `user_email`, `user_type`, `user_optin` 
FROM (`users`) 
WHERE `user_type` = 'Volunteer' 
AND 1 <=FIND_IN_SET(1, user_interests) 
OR 1 <=FIND_IN_SET(2, user_interests) 
OR 1 <=FIND_IN_SET(5, user_interests) 
OR 1 <=FIND_IN_SET(6, user_interests) 
OR 1 <=FIND_IN_SET(7, user_interests) 
OR 1 <=FIND_IN_SET(8, user_interests) 
OR 1 <=FIND_IN_SET(10, user_interests) 
AND 1 <=FIND_IN_SET(1, user_activities) 
OR 1 <=FIND_IN_SET(2, user_activities) 
OR 1 <=FIND_IN_SET(4, user_activities) 
OR 1 <=FIND_IN_SET(5, user_activities) 
OR 1 <=FIND_IN_SET(11, user_activities) 
OR 1 <=FIND_IN_SET(12, user_activities) 
OR 1 <=FIND_IN_SET(14, user_activities) 
AND `user_optin` = '1' 

Если Я беру «OR» из запроса, выполняемого частью запроса user_optin.

В любом случае я могу сделать user_optin explict, чтобы найти запись «1», а не «0».

Я не проектировал эту базу данных, и я понимаю, что find_in_set - не лучший метод для запросов к базе данных MySQL.

Приветствия

+5

Возможно, скопируйте все предыдущие предложения WHERE в скобки, чтобы явно «разбить» предложения? –

+0

Привет @ ʰᵈˑ Как я могу достичь этого? Я написал этот запрос как ORM, но могу вместо этого сделать запрос RAW MySQL. – StuBlackett

+0

Я отправлю его в качестве ответа –

ответ

1

Добавить другие положения в (), чтобы отделить их от окончательного AND.

SELECT 
    `user_id`, 
    `user_firstname`, 
    `user_surname`, 
    `user_email`, 
    `user_type`, 
    `user_optin` 
FROM 
    (`users`) 
WHERE 
    (
     `user_type` = 'Volunteer' 
     AND 1 <= FIND_IN_SET(1, user_interests) 
     OR 1 <= FIND_IN_SET(2, user_interests) 
     OR 1 <= FIND_IN_SET(5, user_interests) 
     OR 1 <= FIND_IN_SET(6, user_interests) 
     OR 1 <= FIND_IN_SET(7, user_interests) 
     OR 1 <= FIND_IN_SET(8, user_interests) 
     OR 1 <= FIND_IN_SET(10, user_interests) 
     AND 1 <= FIND_IN_SET(1, user_activities) 
     OR 1 <= FIND_IN_SET(2, user_activities) 
     OR 1 <= FIND_IN_SET(4, user_activities) 
     OR 1 <= FIND_IN_SET(5, user_activities) 
     OR 1 <= FIND_IN_SET(11, user_activities) 
     OR 1 <= FIND_IN_SET(12, user_activities) 
     OR 1 <= FIND_IN_SET(14, user_activities) 
    ) 
AND `user_optin` = '1' 
+0

Привет @hd Великолепный ответ. Может ли это быть написано в запросе ORM (я использую Codeigniter в моем проекте) – StuBlackett

+1

Спасибо. Извиняюсь, я не работал с инфраструктурой ORM или CodeIgniter. Я бы так подумал (с некоторыми изменениями) –

+0

Не беспокойтесь, оцените вашу помощь! – StuBlackett

Смежные вопросы