2015-03-05 6 views
0

Если m.message_type_id IN() пусто он дает мне ошибку, которая говоритЕсли значение внутри NOT IN пуста MySQL бросает ошибку

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')) UNION (' at line 16 

     SELECT m.id,m.log,message,images,videos,uo.user_id as to_id,owner_id, 
     IF(m.owner_id = 45,'sent','received') as type 
     FROM messages as m 
     LEFT JOIN events as e ON m.message_type_id = e.id 
     LEFT JOIN user_organization as uo ON uo.id = e.org_id 
     WHERE m.message_type_id IN() 
     AND m.type = 'event_invite_request_msg' 

и если WHERE m.message_type_id IN (61) это дает мне правильный ответ.

Какое решение?

+0

показать код, в котором вы передаете идентификатор в пределах где условия –

+0

$ friendsArray = массив(); foreach ($ friends as $ friend) { $ friendsArray [] = $ friend-> friend_id; } $ friendsArray = implode (',', $ friendsArray); – CoderMax

ответ

1

IN Статья предлагает вам отправить хотя бы одно значение, почему вы ожидаете, что оно должно работать даже с пустым параметром?

выражение NOT IN (значение, ...)

Syntax

На более широком уровне это дело почти со всех сравнений, почему вы ожидали бы сравнение не приводят к ошибке, если имеется недопустимое значение для сравнения с

Будет ли это работать на вас?

SELECT myField FROM myTable WHERE MyField2 = 

Неа это не

+0

Есть ли какой-либо другой способ, я могу решить эту ошибку, не изменяя все запросы с условием, которое добавляет «NOT IN», только если в моем приложении есть значения? потому что я использовал этот же запрос более чем в 15 моделях. – CoderMax

+0

Может быть, вы можете проверить, пуст ли ваш массив, а затем инициализировать данные IN со всеми типами сообщений, которые у вас есть с этого момента, в этом случае, но это все исправление, и я бы не предложил вам это сделать. Лучше занять некоторое время и исправить запрос, чтобы включить для этого, а не исправлять ситуацию. –

+0

Я думаю, что я решил эту проблему, добавив массив с значением по умолчанию 0 как value.It не дает мне никаких ошибок, но это правильный способ сделать это? – CoderMax

0

Вы должны будете использовать условие для этого

if(count($friendsArray[])){ 
     $qry = "SELECT m.id,m.log,message,images,videos,uo.user_id as to_id,owner_id, 
     IF(m.owner_id = 45,'sent','received') as type 
     FROM messages as m 
     LEFT JOIN events as e ON m.message_type_id = e.id 
     LEFT JOIN user_organization as uo ON uo.id = e.org_id 
     WHERE m.message_type_id IN ($ids) 
     AND m.type = 'event_invite_request_msg'"; 
}else{ 
     $qry = "SELECT m.id,m.log,message,images,videos,uo.user_id as to_id,owner_id, 
     IF(m.owner_id = 45,'sent','received') as type 
     FROM messages as m 
     LEFT JOIN events as e ON m.message_type_id = e.id 
     LEFT JOIN user_organization as uo ON uo.id = e.org_id 
     WHERE m.type = 'event_invite_request_msg'"; 
} 
+0

Я думаю, что я решил эту проблему, добавив массив со значением по умолчанию 0. 'http://pastebin.com/DuEKEBAc Это не дает мне никаких ошибок, но это правильный способ сделать это? – CoderMax