Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL:in()子句不起作用时如何获取数据_Mysql - Fatal编程技术网

Mysql SQL:in()子句不起作用时如何获取数据

Mysql SQL:in()子句不起作用时如何获取数据,mysql,Mysql,我有一个名为“items”的表。 它有包括索引列在内的列,如下所示 title | name | areacode --------------------------------- police | user1 | 31,31,31 FireStation | user2 | 31,1,2 Restaurant | user22 | 1,1,0,32,32 --------------------------------- 当我使用下面的语句时

我有一个名为“items”的表。 它有包括索引列在内的列,如下所示

title        | name   | areacode
---------------------------------
police       | user1  | 31,31,31
FireStation  | user2  | 31,1,2
Restaurant   | user22 | 1,1,0,32,32
---------------------------------
当我使用下面的语句时

    select title, name from items where IN(31)
我有警察,用户1和消防局,用户2 但是当我使用IN1时 我找不到消防站,用户2

我发现IN子句在多个值(如

    IN(31,1)
都用过了

但当使用单个值(如IN1或IN0)时,它有时无法正确获取数据。我已经找到了包含方法。但是我不熟悉它


总之,如果区号包含值“1”,如何获取FireStation user2?如果区号的值为“0”,您可能不应该将区号数据存储为CSV,因为它是非标准化的,因此很难使用。也就是说,MySQL有一个名为FIND_IN_SET的函数,可以检查给定值是否出现在CSV字符串中。像这样的方法应该会奏效:

SELECT title, name
FROM items
WHERE FIND_IN_SET('0', areacode) > 0
如果要同时检查0或1区号,可以使用以下WHERE子句:


我想了解一下如何实现一个has和allowned-many表关系,它要求您将所有区号放在一个表中,然后使用第三个表将区号连接到项目。这个连接表看起来像id、area_code_id、item_id。一开始可能看起来有点棘手,但从长远来看,它会使管理和查询区号和项目变得更容易。我非常感谢您的精彩回答。然而,有没有一种方法可以在集合中使用和查找?我对sql语句知之甚少,或者我只是使用where find_in_set还是in?您可以添加额外的find_in_set检查。我会更新我的答案。
WHERE FIND_IN_SET('0', areacode) > 0 OR FIND_IN_SET('1', areacode) > 0