difference between where_in and find_in_set

爱⌒轻易说出口 提交于 2019-12-02 05:21:00

WHERE IN requires the set of values to be specified literally in the query, not as a single value containing a comma-delimited string. If you write:

WHERE 6 IN (a.allowed_activity)

it will treat a.allowed_activity as just a single value, and compare it with 6, not as a set of multiple values to search.

FIND_IN_SET searches a comma-delimited string for the value.

Another way to view it is that IN is a shortcut for a bunch of = tests combined with OR:

WHERE x IN (a, b, c, d)

is short for

WHERE x = a OR x = b OR x = c OR x = d

When you rewrite it like this, you can see clearly why it won't work with a column containing a comma-delimited string. It simply translates

WHERE 6 IN (a.allowed_activity) 

to:

WHERE 6 = a.allowed_activity

The following code is incorrect:

$this->db->where("FIND_IN_SET($activity_id, a.allowed_activity) !=",0);

I'm surprised this even runs without error, but one possibility is that it is generating a WHERE clause which compares a string against 0. Of course, they will never be equal, and so this will always be true.

If you want to call the native FIND_IN_SET() function, then you would need to use whereRaw():

$this->db->whereRaw("FIND_IN_SET($activity_id, a.allowed_activity) !=0");

Using WHERE IN (...) is incorrect here, because you have all the values in a single row, separated from commas. WHERE IN would make sense if you wanted to filter for certain values from many rows, each column having a single value.

FIND_IN_SET search for a value in a array and return the index of the value then if the function is different than 0 this mean that the value in present in the list . so the code

  this->db->where("FIND_IN_SET(6, a.allowed_activity) !=",0);

mean return the index of the value 6 in a.allowed_activity
and if the value return is different that 0 then the value 6 is present in a.allowed_activity

WHERE ... IN check if the value in the set but don't return the index .. just return true or false if the value is present or not

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!