2016-07-28 4 views
0

Я пытаюсь написать запрос для следующего ...MySQL несколько аргументов запрос

SELECT SQL_CALC_FOUND_ROWS * FROM calls 
WHERE id IS NOT NULL 
AND account_name LIKE '%$account_search%' 
AND name LIKE '%$adv_term_det%' OR description LIKE '%$adv_term_det%' 
AND type != 'online' 
AND marked_completed_by = '' 
ORDER BY $sort_by DESC LIMIT $page_position, $item_per_page 

Но результаты не являются ожидаемыми значениями. Линия я подозреваю, что вызывает вопрос есть ..

AND name LIKE '%$adv_term_det%' OR description LIKE '%$adv_term_det%' 

Что я подозреваю, должен быть подзапрос, но после нескольких попыток использовать IN я не смог заставить его работать.

SELECT SQL_CALC_FOUND_ROWS * FROM calls 
WHERE call_ref IN 
    (SELECT call_ref FROM calls 
    WHERE name LIKE '%$adv_term_det%' OR description LIKE '%$adv_term_det%' 
) 
AND id IS NOT NULL 
AND account_name LIKE '%$account_search%' 
AND type != 'online' 
AND marked_completed_by = '' 
ORDER BY $sort_by DESC LIMIT $page_position, $item_per_page; 

В основном я хочу, чтобы вернуть все записи, которые соответствуют всем другим критериям и имеют $adv_term_det либо name или description, а также.

Если я использую только AND name LIKE '%$adv_term_det%' я получаю результаты я ожидаю для этого запроса, и также, если я использую только AND description LIKE '%$adv_term_det%', но мне нужно, чтобы найти записи, которые имеют "%$adv_term_det%' в любой name или description

ответ

1

Либо вы не очень опытный с сложной логической логикой или вы просто пропустили ошибку. В любом случае я бы посоветовал использовать круглые скобки, особенно при смешении AND и OR. Я думаю, что это логика, которую вы планируете:

WHERE (id IS NOT NULL) AND 
     (account_name LIKE '%$account_search%') AND 
     (name LIKE '%$adv_term_det%' OR description LIKE '%$adv_term_det%') AND 
     (type <> 'online') AND 
     (marked_completed_by = '') 

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

+0

Спасибо, отлично работает. Я действительно работаю и развиваюсь каждый день. Я знал о добавлении круглых скобок для запросов на других языках, но не знал, что вы тоже можете использовать их в SQL. Просто из любопытства вы можете уточнить, что вы подразумеваете под параметрами, а не переменными? – tatty27

+0

Хммм. , , Место для начала - с параметризованными запросами. Это важно, когда вы занимаетесь разработкой приложений. Если вы сейчас играете, то это может быть путаница. Однако в какой-то момент вы должны узнать о SQL Injection, динамическом SQL и параметризованных запросах. –

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