【问题标题】:If the value inside NOT IN is empty mysql is throwing an error如果 NOT IN 中的值为空 mysql 会抛出错误
【发布时间】:2015-03-05 05:55:54
【问题描述】:

如果 m.message_type_id IN () 为空,它会给我一个错误提示

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) 它会给我正确的响应。

解决办法是什么?

【问题讨论】:

  • 在 where 条件下显示你传递 id 的代码
  • $friendsArray = array(); foreach($friends as $friend){ $friendsArray[] = $friend->friend_id; } $friendsArray = implode(',',$friendsArray);

标签: php mysql codeigniter codeigniter-2 notin


【解决方案1】:

IN 子句希望您发送至少一个值,为什么您希望它即使使用空参数也能工作?

expr NOT IN (value,...)

Syntax

在更广泛的层面上,几乎所有比较都是这种情况,如果有一个无效的值可供比较,为什么您希望比较不会导致错误

这对你有用吗?

SELECT myField FROM myTable WHERE MyField2 = 

不会的

【讨论】:

  • 是否有任何其他方法可以解决此错误,而无需更改所有查询,条件是仅当我的应用程序中有值时才附加“NOT IN”?因为我在超过 15 个模型中使用了相同的查询。
  • 可以,您可以检查您的数组是否为空,然后使用您拥有的所有消息类型初始化您的 IN 数据,因为这就是这种情况下的意图,但这都是补丁工作,我不建议你去做。最好现在花一些时间来修复查询以合并它,而不是修补周围的东西。
  • 我想我通过将默认值 0 附加到数组中解决了这个问题。它没有给我任何错误,但这是正确的方法吗?
  • 如果您希望在未选择类型时不显示任何结果,那么可以,如果您希望在未指定类型时显示所有类型,那么这是错误的方法只给你该字段的值为 0 的行
【解决方案2】:

你必须为此使用条件

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 附加到数组中解决了这个问题。 `pastebin.com/DuEKEBAc 它没有给我任何错误,但这是正确的方法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 2019-01-01
  • 1970-01-01
  • 2020-09-12
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
相关资源
最近更新 更多